#include <stdio.h>
int main(void)
{
char str[] = "Hello World!";
printf("str = %s\n", str);
printf("str의 크기 : %d\n", sizeof(str));
// 왜 13이라고 나올까?
printf("%d\n", sizeof("Hello"));
// 왜 6이라고 나올까?
return 0;
}
위 코드에서 str의 크기는 왜 13이 나오고 Hello의 크기는 왜 6이 나올까?
그 답은, 항상 문자열의 끝에는 우리가 원하지 않아도 널 문자란 것이 붙기 때문이다.
null 문자는 말 그대로 빈 문자란 뜻이다.
문자열 배열에서 null ( '\0' ) 문자는 문자열의 끝을 알기 위해서 쓰는 것이다.
#include <stdio.h>
int main(void)
{
char str1[10];
str1[0] = 'a';
str1[1] = 'b';
str1[2] = 'c';
str1[3] = '\0';
str1[4] = 'd';
printf("str1 = %s", str1);
printf("str1의 크기 = %d", sizeof(str1));
return 0;
}
위에서 str1의 인덱스 3에다 널 문자를 넣었다.
결과는 신기하게도, abc까지만 출력된다.
위에서 배운 그대로이다. 문자열의 끝을 알기 위해서 널 문자를 쓴다고 했는데, 위 코드에서는 우리가 인위적으로 널 문자를 문자열 중간에 넣었다. C언어는 우리가 인위적으로 넣은 널 문자를 문자열의 끝으로 이해하기 때문에 인덱스 4번 'd'가 출력되지 않은 것이다.
우리는 C언어에서 문자를 적을때는 'a' 이렇게 적고, 문자열로 적을 때는 "a" 이렇게 쌍따옴표로 적는다.
쌍따옴표로 적을 때는 우리도 모르게 뒤에 널 문자가 붙여진 것이다.
그래서 str[0] = "a" 라고 하면 오류가 난다. "a"는 'a'와 '\0'로 두 칸으로 이루어져있기 때문이다.
( 참고로 널 문자의 아스키코드 값(정수형 값)은 0이다. )
반응형