23-2다음 C 프로그램의 출력 결과를 적으시오.#include <… | 2023년 정보처리기사실기 2회차 기출문제 상세 페이지
2
23-2
다음 C 프로그램의 출력 결과를 적으시오.
#include <stdio.h>
#include <string.h>
char slot[20];
char *keep(const char *s) {
strcpy(slot, s);
return slot;
}
int main(void) {
char *a = keep("LIME");
char *b = keep("PLUM");
printf("%s\n", a);
char *c = keep("FIG");
printf("%s\n", b);
printf("%s\n", c);
return 0;
}해설
PLUM
FIG
FIG
[해설]
keep()은 매번 같은 전역 배열 slot의 주소를 돌려준다. 그래서 a, b, c는 모두 한 곳을 가리키고, 출력되는 값은 그 시점에 slot에 마지막으로 복사된 문자열이다.
- keep("LIME"), keep("PLUM") 후 slot = "PLUM" → printf(a) → PLUM
- keep("FIG") 후 slot = "FIG" → printf(b), printf(c) → FIG, FIG
a에 LIME이 남아 있을 것이라 착각하기 쉽지만, 포인터는 값이 아니라 위치를 저장한다. 호출마다 따로 보관하려면 동적 할당이나 호출자 쪽 버퍼가 필요하다.
내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.