C 문자열이란
"hi"는 끝에 '\0'이 붙은 char 배열입니다.
char s[] = "hi"; // {'h','i','\0'}
printf("%zu\n", strlen(s)); // 2
strlen은 null을 만날 때까지 셉니다. null이 없으면 오버런입니다.
복사·연결
#include <string.h>
char buf[32];
strcpy(buf, "ab"); // 대상이 충분한지 확인
strncat(buf, "cd", sizeof(buf) - strlen(buf) - 1);
가능하면 snprintf로 경계를 명시하세요.
char out[64];
snprintf(out, sizeof(out), "%d+%d=%d", 1, 2, 3);
입력
scanf("%s", buf)는 공백에서 끊기고 길이 제한이 없으면 위험합니다.
실험에서는 짧은 리터럴·고정 입력으로 동작을 확인하세요.
JS/Python과의 차이
고수준 언어의 문자열은 길이를 따로 들고, 유니코드를 비교적 편하게 다룹니다.
C는 바이트 + null 모델입니다. 코딩 테스트 본선 문제는 이 사이트에서 JS/Python 등을 쓰세요.
연습
main에서 두 문자열을 이어 printf로 출력해 보세요. 버퍼 크기를 일부러 작게 잡아 어떤 일이 생기는지(실험적으로) 관찰하되, 위험한 입력은 넣지 마세요.
문자 vs 문자열
char c = 'A'; // 한 글자
char s[] = "A"; // 'A' + '\0'
'와 "를 혼동하지 마세요.
비교
#include <string.h>
if (strcmp(a, b) == 0) { /* 같음 */ }
==로 포인터 주소만 비교하면 내용이 같아도 실패합니다.
한 줄
> 문자열 끝은 \0. 길이·복사 전에 버퍼와 null을 확인한다.