문법 · C · beginner

C 문자열: null 종료와 길이

char 배열, strlen, 버퍼 크기 함정.

배우기 · C 실험 기초 · 14분 · 4/6 · c · 문자열

이 트랙 목차 (6)
  1. 1. C 실험: main과 입출력 감각
  2. 2. C 타입·배열·반복
  3. 3. 포인터 감각: 주소·배열·decay
  4. 4. C 문자열: null 종료와 길이
  5. 5. 구조체 맛보기: 묶음과 배열
  6. 6. 반복과 간단한 입출력

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을 확인한다.

관련 짧은 원리

관련 문제