[C언어] char 배열 선언시 주의사항

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