작성
·
155
0
강의에서 말씀해 주신 pointer를 이용해서 예제를 작성했는데 첫 줄만 출력되고 둘째줄 부터는 출력이 되지 않습니다.
print_books 함수에서 books[1]->name, books[2]->name 등이 접근이 되지 않는데 코드에 무슨 문제가 있는 걸까요? 확인 부탁드립니다. 감사합니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h> // strrlen(), strcmp()
#include <string.h> // malloc(), free()
#define SLEN 100
struct book
{
char name[SLEN];
char author[SLEN];
};
void print_books(const struct book *books[], int n);
int main(void)
{
struct book* my_books = (struct book*)malloc(sizeof(struct book) * 3);
my_books[0] = (struct book){ "a","b" };
my_books[1] = (struct book){ "baa","f" };
my_books[2] = (struct book){ "g","a" };
print_books(&my_books, 3);
free(my_books);
return 0;
}
void print_books(const struct book *books[], int n)
{
for (int i = 0; i < n; i++)
printf("Book %d : %s written by %s \n", i + 1, books[i]->name, books[i]->author);
}
답변 1
0
호출은 print_books(my_books, 3); 로 (&my_books 가 아닌)
void print_books(const struct book* books, int n) // (const trcut book* books[] 가 아닌)
{
for (int i = 0; i < n; i++)
printf("Book %d : %s written by %s \n", i + 1, books[i].name, books[i].author);
}
이렇게 고치셔야 맞을 것 같아요
배열 이름은 포인터라는 것을 배우셨을 것입니다. 배열은 그 자체로 포인터인데 굳이 포인터를 원소로 하는 배열인 const struct book* books [] 로 할 필요가 없구요!
또한 my_books 그 자체가 포인터인데 포인터의 주소인 &my_books 로 넘길 이유가 없습니다 !