Q & A

문자열의 마지막에는 왜 NULL이 붙나요?

포인터 방식으로 문자열을 사용할 때 문자열의 실제 크기(길이)를 포인터에 저장할 수 없습니다. 즉, 문자열 포인터에는 문자열이 있는 메모리 주소만 저장하므로 문자열의 정확한 길이는 알 수 없습니다. 그래서 문자열이 끝나는 지점에는 NULL을 붙이겠다고 약속하고, NULL을 만나면 문자열 처리를 끝냅니다.

배열은 배열의 크기만 알 수 있을 뿐 배열 안에 저장된 문자열의 길이는 따로 저장할 수 없습니다. 또한, 배열은 크기가 정해져 있다 하더라도 문자열이 들어있지 않은 나머지 공간까지 처리할 필요는 없습니다. 따라서 문자열 마지막에 NULL을 붙여서 문자열이 끝나는 부분까지만 처리합니다.

문자 배열은 NULL로 채워야 하나요?

strcat, sprintf 등의 문자열 함수를 사용하면 문자열 끝에 NULL을 넣어주므로 문자 배열의 요소를 모두 NULL로 채울 필요는 없습니다.

C 언어에서 한글 문자열은 어떻게 사용하나요?

영문 문자열을 사용하듯이 한글도 " " (큰따옴표)로 묶어서 사용하면 됩니다.

C 언어에서 한글은 어떻게 처리되나요?

C 언어에서 한글 사용에 대한 표준은 정해져 있지 않습니다. 그러다 보니 운영체제 및 컴파일러에 따라 조금씩 차이가 있습니다. 보통 한글은 .c 파일을 저장한 인코딩에 따라 처리됩니다.

  • Visual Studio는 CP949이 기본 인코딩이며 UTF-8도 가능합니다.
  • 리눅스는 설정에 따라 UTF-8 또는 EUC-KR를 사용합니다.

CP949와 EUC-KR은 한글 1글자를 2바이트로 저장하는데, UTF-8은 한글 1글자를 3바이트로 저장합니다. 따라서 다음과 같이 문자열 "안녕"의 길이를 구할 때 .c 파일을 CP949, EUC-KR로 저장했다면 4, UTF-8로 저장했다면 6이 나옵니다.

  • CP949, EUC-KR: 2바이트 * 2글자 = 4
  • UTF-8: 3바이트 * 2글자 = 6
char *s1 = "안녕";

printf("%d\n", strlen(s1));    // 4: CP949, EUC-KR
                               // 6: UTF-8

문자열 리터럴의 최대 크기는 몇인가요?

C 언어 표준에는 최소 4,095 문자로 정의되어 있으며 Visual Studio 2015는 최대 2048 바이트까지, GCC는 4,095 문자까지 사용할 수 있습니다.