728x90
char 배열 선언시 저장할 문자열의 길이보다 최소한 하나 이상 크게 배열을 선언해야한다는 점을 명심하자.
여분의 공간, 문자열의 마지막에 널 문자(/0)를 저장해야 하기 때문이다.
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
널 문자는 아스키 코드 값이 0인 문자를 말하며 문자 상수로는 /0으로 표현된다. 문자열의 끝을 표시하는 용도로 사용된다.
만약 str[80]이라는 배열에 길이가 5인 문자열을 입력받는다면, 나머지 부분은 모두 널 문자로 채워진다.
이때 printf로 str을 출력하면 배열 크기와 상관없이 정확하게 처음 초기화시켰던 문자열까지만 출력한다.
printf는 배열 크기와 상관없이 널문자가 나올때까지만 출력하도록 만들어졌기 때문이다.
char str[80] = "applejam";
printf("%s\n",str);
scanf("%s", str);
printf("%s\n",str);
applejam
입력 >> grape
grape
scanf함수는 사용자가 입력한 문자열 다음에 배열에 빈 부분 모두를 널 문자로 채운다. 따라서 마지막 행의 printf함수에서 grapejam이 아닌 grape만 출력이 되는 것이다.
728x90
'C언어' 카테고리의 다른 글
[C언어] 문자열 복사 strcpy 함수 (0) | 2022.02.25 |
---|---|
[C언어] 백준 2798 : 블랙잭 (0) | 2022.01.26 |
[C언어] 문자 입출력 함수 getchar(), putchar() (0) | 2022.01.24 |
[C언어] 백준 1157 : 아스키 코드를 이용한 문자형 정수 변환 (0) | 2022.01.20 |
[C언어] : scanf()함수 입력 무시 문제, 버퍼링 (0) | 2022.01.19 |