char a[11]이던데 왜 a[11]인가요?
안녕하세요 길벗수험서 운영팀입니다.
문자 배열 a가 10자를 받아들이기 때문에 끝자리 표시자인 널문자('\0')가 들어갈 자리를 확보해줘야 하기 때문입니다.
C언어의 경우 문자열을 처리할 때, 배열을 이용합니다.
char c[] = "korea";
위와 같이 저장했을 때, 단순히 생각하면 배열 c는 k,o,r,e,a의 5글자인 5개의 배열요소로 생성되었다고 생각할 것입니다.
하지만 실제 배열 요소들에 저장된 것을 확인하면,
c[0] | c[1] | c[2] | c[3] | c[4] | c[5] |
k | o | r | e | a | \0 |
위와 같이 저장됩니다. 0~5인 총 6개의 배열요소를 사용하게 되죠.
널문자(\0)는 프로그램이 어디까지를 문자열로 인식하느냐의 기준을 나타냅니다.
예를 들어, printf("%s",c) 로 배열 c를 출력하다면, 차례대로 c[0]부터 출력하여 c[5]의 \0을 만나는 순간까지 모두 출력하게 되죠.
이렇게 볼 수도 있습니다.
char c[20] = "korea";
이 경우 0~5까지 위의 표와 똑같이 들어가겠죠. 나머지는 정의되지 않은 값(undefined value)이 들어가 있을 겁니다.
이것을 똑같이 printf("%s",c)로 출력하면 c[0]~c[20]의 모든 요소들이 아닌 \0까지의 값인 korea만이 출력되게 됩니다.
문자열을 배열로 처리할 때 항상 문자열의 마지막에는 \0이 들어갈 공간을 확보해야 한다는 점을 염두에 두세요.
행복한 하루되세요 :)
-
관리자2019-04-03 10:41:54
안녕하세요 길벗수험서 운영팀입니다.
문자 배열 a가 10자를 받아들이기 때문에 끝자리 표시자인 널문자('\0')가 들어갈 자리를 확보해줘야 하기 때문입니다.
C언어의 경우 문자열을 처리할 때, 배열을 이용합니다.
char c[] = "korea";
위와 같이 저장했을 때, 단순히 생각하면 배열 c는 k,o,r,e,a의 5글자인 5개의 배열요소로 생성되었다고 생각할 것입니다.
하지만 실제 배열 요소들에 저장된 것을 확인하면,
c[0]
c[1]
c[2]
c[3]
c[4]
c[5]
k
o
r
e
a
\0
위와 같이 저장됩니다. 0~5인 총 6개의 배열요소를 사용하게 되죠.
널문자(\0)는 프로그램이 어디까지를 문자열로 인식하느냐의 기준을 나타냅니다.
예를 들어, printf("%s",c) 로 배열 c를 출력하다면, 차례대로 c[0]부터 출력하여 c[5]의 \0을 만나는 순간까지 모두 출력하게 되죠.
이렇게 볼 수도 있습니다.
char c[20] = "korea";
이 경우 0~5까지 위의 표와 똑같이 들어가겠죠. 나머지는 정의되지 않은 값(undefined value)이 들어가 있을 겁니다.
이것을 똑같이 printf("%s",c)로 출력하면 c[0]~c[20]의 모든 요소들이 아닌 \0까지의 값인 korea만이 출력되게 됩니다.
문자열을 배열로 처리할 때 항상 문자열의 마지막에는 \0이 들어갈 공간을 확보해야 한다는 점을 염두에 두세요.
행복한 하루되세요 :)
-
관리자2019-04-04 10:04:20
안녕하세요 길벗수험서 운영팀입니다.
음.. 무언가 혼동하고 계신 것 같습니다.
char a[10]을 선언한다는 것은
a[0]~a[9]까지의 10개의 요소를 사용하겠다는 의미입니다.
a[0]~a[10]까지 11개의 요소를 사용하겠다는 것이 아닙니다.
이렇게 사용하기 위해서는 a[11]을 선언했어야 합니다.
마찬가지로 12개의 요소를 사용하기 위해서는 a[12]를 선언해서 a[0]~a[11]을 사용하면 되겠죠.
행복한 하루되세요 :)
-
*2019-04-03 11:02:05
답변 보니 얼추 이해는 가는데 하나 더 이해가 안되는게 널문자까지 포함한다 해도 c언어에서는 배열이 0부터 시작하니까 a[10]이어야 되는데 왜 a[11]인건가요? 아니면 소수점도 포함이라 12칸을 설정하는건가요?