46.8 연습문제: 인적 정보 함수 만들기
다음 소스 코드를 완성하여 "Kayle", 22가 각 줄에 출력되게 만드세요.
practice_return_struct_pointer.c
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> struct Person { char name[20]; int age; }; struct Person *allocPerson() { struct Person *p = malloc(sizeof(struct Person)); ①_______________________ ________________________ ②_______________________ } int main() { struct Person *p1; p1 = allocPerson(); printf("%s\n", p1->name); printf("%d\n", p1->age); free(p1); return 0; }
실행 결과
Kayle 22
정답
① strcpy(p->name, "Kayle"); p->age = 22; ② return p;
해설
먼저 main 함수에서 allocPerson 함수를 호출하여 반환된 포인터로 "Kayle", 22를 출력하고 있습니다. 따라서 "Kayle", 22는 allocPerson 함수 안에서 저장된 값입니다.
allocPerson 함수를 보면 struct Person *allocPerson()과 같이 구조체 포인터를 반환하고, 포인터에 메모리를 할당하고 있습니다. 그러므로 메모리가 할당된 포인터에서 -> (화살표 연산자)로 name에 접근하여 strcpy 함수로 문자열 "Kayle"을 복사하고, age에는 22를 저장한 뒤 포인터를 반환하면 됩니다.