해결된 질문
작성
·
83
답변 1
0
안녕하세요,
공란 []의 경우에는 뒤에 들어오는 변수에 딱 맞춰서 알아서 변동되는 크기를 가집니다. 이 경우에 몇 개의 문자를 넣어도 그것에 맞춰서 배열 공간을 잡아줍니다.
#include <stdio.h>
void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int numbers[] = {1, 2, 3, 4, 5}; // 배열 크기는 자동으로 계산됨 (5개 요소)
int size = sizeof(numbers) / sizeof(numbers[0]); // 배열의 크기 계산
printArray(numbers, size); // 배열과 크기를 함수로 넘김
return 0;
}
'\0'은 우리 눈에 보이지 않고 프로그램 내부에서 가지고 있기 때문에 항상 생략되어 있다고 보시면 됩니다. 만약에 초기화를 변수 = "문자열"
로 했다면 무조건 맨 끝에 '\0'이 들어가 있습니다.
그런데, 이렇게 할 수도 있습니다. NULL을 명시적으로 넣지 않는 것입니다.
#include <stdio.h>
int main() {
// 문자 배열 선언
char str[6]; // 문자 5개를 넣을 공간을 마련, 마지막 null 문자는 넣지 않음
int i;
// 반복문을 통해 문자 배열에 'A'부터 'E'까지 넣음
for (i = 0; i < 5; i++) {
str[i] = 'A' + i; // 'A', 'B', 'C', 'D', 'E' 순서대로 저장
}
// null 문자('\0')는 넣지 않음
// %s로 출력
printf("문자열: %s\n", str);
return 0;
}
이 경우에는 정상적으로 출력이 되긴 합니다만, 컴파일러의 버전이나 프로그램 설계에 따라서 쓰레기값(이상한 값)이 출력될 수 있습니다.
대부분의 경우 정상적으로 출력이 되긴하나, 그렇지 않을 수도 있다는 이야기죠.
그래서 보통은 문자를 여러 개를 넣어서 문자열로 만들 때는 가장 마지막에 문자가 끝났다는 의미로 '\0'을 넣곤 합니다.
그리고 엄청나게 큰 배열을 먼저 선언하고(예를 들어 100) 거기에 5개의 문자만 넣을 때도 문제가 됩니다. 이 경우에는 어디가 끝인지 잘 모르기 때문에 6번째에 '\0'을 넣어서 문자열이 완료되었다고 표기하기도 합니다. 최근 이 예제가 기출문제로 등장했습니다.
이해에 도움이 되셨을까요?