char 배열 선언시 저장할 문자열의 길이보다 최소한 하나 이상 크게 배열을 선언해야한다는 점을 명심하자.
여분의 공간, 문자열의 마지막에 널 문자(/0)를 저장해야 하기 때문이다.
널 문자는 아스키 코드 값이 0인 문자를 말하며 문자 상수로는 /0으로 표현된다. 문자열의 끝을 표시하는 용도로 사용된다.
str[80]이라는 배열에 길이가 5인 문자열을 입력받는다면, 나머지 부분은 모두 널 문자로 채워진다.
printf는 배열 크기와 상관없이 널문자가 나올때까지만 출력하도록 만들어졌다. 따라서 정확하게 초기화된 문자열만 출력할 수 있다.
char str[80] = "applejam";
printf("%s\n",str);
scanf("%s", str);
printf("%s\n",str);
결과
applejam
grape(입력)
grape
scanf함수는 사용자가 입력한 문자열 다음에 배열에 빈 부분 모두를 널 문자로 채운다. 따라서 마지막 행의 printf함수에서 grapejam이 아닌 grape만 출력이 되는 것이다.
char arr1[3], arr2[3];
scanf("%s %s", arr1, arr2);
printf("%s %s",arr1,arr2);
입력
123 456
결과
456
배열 크기를 3으로 잡아놓고 입력값 길이를 3으로 주었기 때문에 결과값이 이상하게 나온다.
char arr1[4], arr2[4];
scanf("%s %s", arr1, arr2);
printf("%s %s",arr1,arr2);
입력
123 456
결과
123 456
(참고 : 혼자 공부하는 C언어, 서현우 저)