다음 C 프로그램에서 세 포인터가 가리키는 저장 공간이 어떻게 공유되는지 분석하여 출력 결과를 줄 단위로 쓰시오.
#include <stdio.h>
char *store(const char *source) {
static char buffer[16];
int i = 0;
while (source[i] != '\0' && i < 15) {
buffer[i] = source[i];
i++;
}
buffer[i] = '\0';
return buffer;
}
int main(void) {
char *first = store("Han");
char *second = store("Lee");
char *third = store("Park");
printf("%s\n%s\n%s", first, second, third);
return 0;
}모범답안
Park Park Park
풀이와 판단 근거
store의 buffer는 static 배열이므로 함수 호출이 끝나도 유지되지만 호출마다 새 배열이 만들어지는 것은 아니다. first, second, third는 모두 같은 buffer의 시작 주소를 저장한다.
마지막 `store("Park")` 호출이 그 공유 버퍼를 Park로 덮어쓴 뒤 출력하므로 세 포인터에서 모두 Park가 읽힌다. 포인터를 저장한 것이 문자열 복사를 만든 것은 아니다.
자주 틀리는 지점
- 각 호출마다 독립적인 지역 배열이 만들어진다고 봄
- 포인터 변수에 대입할 때 문자열 내용이 자동 복사된다고 생각함
- 마지막 포인터 third만 Park를 출력한다고 계산함
자동 판정 방식
한글·영문 동의어와 문항별 필수 개념을 확인하며, 정답 단어가 부정되거나 반대 개념과 함께 쓰이면 자동 정답으로 확정하지 않습니다. 부분점수는 ITPASSLAB의 학습용 예상 점수입니다.