문제
다음 C 코드의 출력 결과로 가장 적절한 것은?
C#include <stdio.h> struct Test { int i; const char *g; }; int main() { struct Test test[] = {{1, "AB"}, {2, "DC"}, {3, "EB"}}; struct Test *p = &test[1]; printf("%s", p->g + (p->i - 1)); return 0; }
① C ② D ③ DC ④ B
정답
1번
해설
정답: 1. p는 test[1]을 가리키므로 p->i는 2이고 p->g는 "DC"이다. p->g + 1은 문자열의 두 번째 문자 위치를 가리키므로 "C"가 출력된다.
오답 풀이
- 1번: 포인터가 문자열의 두 번째 문자 위치를 가리키므로 정답이다.
- 2번: 문자열 시작 위치에서 출력한 경우이다.
- 3번: p->g에 포인터 이동을 적용하지 않은 결과이다.
- 4번: 다른 구조체 원소의 문자열과 혼동한 값이다.
보충 개념 문자열 포인터에 정수를 더하면 해당 문자 위치로 포인터가 이동한다. %s는 그 위치부터 널 문자 전까지 출력한다.