모두CBT

23-2다음 C 프로그램의 출력 결과를 적으시오.#include &lt… | 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이 남아 있을 것이라 착각하기 쉽지만, 포인터는 값이 아니라 위치를 저장한다. 호출마다 따로 보관하려면 동적 할당이나 호출자 쪽 버퍼가 필요하다.

내용에 오류가 있거나 최신 법령·기준과 다른 부분이 보이면 알려주세요. 확인 후 반영하겠습니다.