C 언어에는 독립된 문자열(String) 타입이 존재하지 않습니다. 대신 문자의 배열(char[]) 마지막에 문자열의 끝을 알려주는 **널 문자(Null Character, \0)**를 넣어 문자열을 표현합니다.
1. C 문자열과 널 문자 (\0)
char str[6] = "Hello"; // 실제로는 H, e, l, l, o, \0 총 6개 바이트
- 문자열의 끝에는 항상 컴파일러가 자동으로 **
\0(ASCII 값 0)**을 덧붙입니다. - 따라서 문자열을 담을 배열 크기는 실제 글자 수 + 1 이상으로 넉넉히 선언해야 합니다.
2. 주요 문자열 처리 함수 (<string.h>)
| 함수 | 역할 | 사용 예시 |
|---|---|---|
strlen(str) |
널 문자를 제외한 순수 문자열 길이를 반환 | strlen("Hello") $ |
| ightarrow$ 5 | ||
strcpy(dest, src) |
문자열을 복사하여 붙여넣음 | strcpy(target, "ABC"); |
strcat(dest, src) |
원본 뒤에 다른 문자열을 이어 붙임 | strcat(str, " World"); |
strcmp(s1, s2) |
두 문자열을 사전순 비교 (같으면 0 반환) | if(strcmp(a, b) == 0) |
3. 문자열 입출력 시 주의점: scanf vs fgets
scanf("%s", str): 띄어쓰기(공백)나 줄바꿈을 만나면 입력을 멈춥니다.fgets(str, sizeof(str), stdin): 공백을 포함해 한 줄 전체를 안전하게 입력받습니다.
4. 자주 묻는 질문 (Q&A)
Q. 왜 str1 = str2; 처럼 대입 연산자로 문자열을 한번에 바꿀 수 없나요?
A. 배열 이름은 그 자체로 메모리의 첫 주소(상수 포인터)이기 때문에 대입 연산자(=)로 통째로 변경할 수 없습니다. 반드시 strcpy() 함수를 사용하여 내부 문자를 하나씩 복사해야 합니다.