char a[15]를 전역변수로 선언하면 따로 초기화 안 해도 초기화가 됩니다. 그런데 이때 초기화 된다는게 어떤식으로 초기화 되는 건가요? a[0]부터 a[15]까지 숫자 0(아스키코드 0 말고 숫자!)으로 초기화 되는 건가요? 아니면 전부 다 NULL값이 들어가나요? NULL의 아스키코드가 0이라서 0이 출력 되는 건가요? 예를들어 전역변수로 char b[15]="abcd"; 이렇게 해주면 b[4]에 null이 들어가고 나머지(b[5]~b[15])도 null이 들어가는 건가요? ``` #include <stdio.h> char s[15]="abcd"; int main(void) { for(int i=0; i<15; i++) printf("[i=%d] %c %d\n", i, s[i], s[i]); return 0; } ``` 출력결과: ``` [i=0] a 97 [i=1] b 98 [i=2] c 99 [i=3] d 100 [i=4] 0 [i=5] 0 [i=6] 0 [i=7] 0 [i=8] 0 [i=9] 0 [i=10] 0 [i=11] 0 [i=12] 0 [i=13] 0 [i=14] 0 ``` 저는 문자열의 맨마지막에만 null이 들어간다고 알고 있었는데 알고리즘 문제를 풀다보니 잘못 알고 있는 건가 의문점이 생겨서 이렇게 질문을 남깁니다. 항상 좋은 강의 감사합니다!
# 답변입니다. ### 제시한 3가지 보기 중, 정답은 3번입니다. 1. a[0]부터 a[15]까지 숫자 0(아스키코드 0 말고 숫자!)으로 초기화 되는 건가요? 2. 아니면 전부 다 NULL값이 들어가나요? 3. NULL의 아스키코드가 0이라서 0이 출력 되는 건가요? ### 아래의 추가 질문 또한, null(0)로 초기화 되는 것이 맞습니다. + 이렇게 해주면 b[4]에 null이 들어가고 나머지(b[5]~b[15])도 null이 들어가는 건가요? ### 추가 설명 아래의 코드를 수행하면, ``` #include <stdio.h> char s[15]="abcd"; int main(void) { for(int i=0; i<15; i++) { printf("[i=%d] char(%c) decimal(%d)\n", i, s[i], s[i]); } return 0; } ``` 아래의 결과가 나옵니다. ``` [i=0] char(a) decimal(97) [i=1] char(b) decimal(98) [i=2] char(c) decimal(99) [i=3] char(d) decimal(100) [i=4] char() decimal(0) [i=5] char() decimal(0) [i=6] char() decimal(0) [i=7] char() decimal(0) [i=8] char() decimal(0) [i=9] char() decimal(0) [i=10] char() decimal(0) [i=11] char() decimal(0) [i=12] char() decimal(0) [i=13] char() decimal(0) [i=14] char() decimal(0) ``` 위 내용을 통해, 초기값이 숫자 0이라는 것. 또, 숫자 0은 null을 의미한다는 것을 알 수 있습니다. ### PS. 과거 C언어는 문자열의 경우 끝자리만 null값. 나머지는 쓰레기 값으로 초기화되었으나, 최근 버전은 경우 모두 0으로 초기화 됩니다.