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이 들어간다고 알고 있었는데
알고리즘 문제를 풀다보니 잘못 알고 있는 건가 의문점이 생겨서 이렇게 질문을 남깁니다.
항상 좋은 강의 감사합니다!
sehongpark님의 답변
# 답변입니다.
### 제시한 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으로 초기화 됩니다.