• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

출력 오류가 발생합니다.

21.12.09 14:48 작성 조회수 100

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

안소님의 프로필

안소

2021.12.12

호출은 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 로 넘길 이유가 없습니다 !