배열과 문자열
10:11초 정도질문입니다.
[]대괄호안에 숫자가 들어가면, 문자배열의 공간수로 이해하였는데, 공란은 무슨의미인가요?
공란이있거나 숫자가 았거나 똑같이 풀이가되어 헷갈립니다.
그리고 %s 변수는 널값 ‘\0’ 이 나올때까지 문자 배열대로 쭉 출력하여야 하는데, 이게 항상 생략되는건가요? 생략되는 경우가 따로있나요?
답변 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'을 넣어서 문자열이 완료되었다고 표기하기도 합니다. 최근 이 예제가 기출문제로 등장했습니다.
이해에 도움이 되셨을까요?
정처기 2026-3 실기 문의
0
66
2
정처기 실기 3회 컴싸 사용 여부
0
42
1
모의고사 1 회 2번문제 중
0
59
2
26-2 이론문제 재탕
1
47
1
26-2년도 코드문제
0
34
0
26-2 코드문제
0
37
1
15분 48초 질문
0
46
2
26-1년도 이론문제 재탕
0
58
1
26-1년도 코드문제 재탕
0
43
0
이론재탕만 눈치챘어도
0
70
1
25-3년도 이론문제 재탕
0
53
1
25-3년도 코드문제 재탕
0
39
0
출력값 문의
0
48
2
25-2 분기커버리지
0
45
0
25-2 이론 재탕
0
62
1
25-1 이론 재탕
0
50
1
서브넷 마스크
0
48
2
모의고사 1회 계산문제 2개 맞았는데
0
67
2
업캐스팅 문제 예시 4번 부모 호출
0
48
2
모의고사 자료 해설이 너무 불친절하네요.
0
93
2
부모의 생성자 출력 관련
0
44
2
24-3 이론파트 재탕문제
0
56
0
누락코드
0
44
1
다차원 배열 포인터 질문있습니다
0
68
3





