작성하고 실행하니 coding까지는 잘 출력됩니다. 그런데 그 뒤에 뭔가 이상한 값이 나옵니다. 한자 같기도 하고 글자가 깨진 것처럼 보이는 이상한 값입니다. 왜 이런 값이 출력됐을까요?
그 이유는 배열의 공간이 부족해 문자열 끝에 널(null) 문자가 포함되지 않았기 때문입니다. 널 문자는 특수 문자로, 0 앞에 역슬래시를 붙여(\0) 표현합니다. 배열에 문자열을 저장할 때는 항상 문자열의 끝을 알리는 널 문자가 들어갈 공간을 마련해야 합니다. 그래서 배열 크기를 글자 수 + 1로 선언하면 마지막 칸에 널 문자가 자동으로 들어갑니다.
코드를 다시 볼까요? coding은 6글자죠. 그런데 str 배열의 크기를 6으로 선언했기 때문에 공간이 부족합니다. 따라서 str[7]로 수정하고 다시 실행하면 정상적으로 출력됩니다.
6.4.1 배열에문자열저장하기.c
int main(void) {
char str[7] = "coding"; // [c][o][d][i][n][g][\0]
printf("%s\n", str);
return 0;
}
실행결과 |
coding |