작성
·
174
0
강의 11분 경 나오는 강의 중의 read_books2 코드에서처럼
함수 내부적으로 구조체배열을 만들고,
parameter에서 받아온 함수 밖 배열에 대입하면 되는건데...
이중 포인터라는 생각에
이중으로 indirection 하여, 받아온 주소에 있는 배열의 값을 직접 바꿔주는 코드를 작성했습니다..
이중으로 하려니 넘 복잡하여 이것저것 해보다가 일단 실행은 되는 코드를 구현한 것 같은데
이것저것 해보다가 된 것이라 오류나 예외가 없는 코드인지 잘 모르겠어서..
struct book
{
char name[LEN];
char author[LEN];
};
int main()
{ int bookcnt = 3;
struct book* my_books = (struct book*)malloc(sizeof(struct book) * bookcnt);
read_books("text.txt", &my_books, &bookcnt);
}
void read_books2(const char* filename, struct book** books_dptr, int* n)
{
printf("Press any key to read data from a file.\n");
if (_getch()) printf("\n");
else exit(1);
FILE* fr;
fr = fopen(filename, "r");
fscanf(fr, "%d\n", n);
char buffer[LEN];
for (int i = 0; i < *n; i++)
{
fscanf(fr, "%[^\n]%*c", buffer);
strcpy( ((*books_dptr)[i]).name, buffer);
fscanf(fr, "%[^\n]%*c", buffer);
strcpy( ((*books_dptr)[i]).author, buffer);
printf("Book %d : \"%s\" written by \"%s\"\n",
i + 1, ((*books_dptr)[i]).name, ((*books_dptr)[i]).author);
}
}
의도는 구조체의 배열의 주소를 함수의 인자로 받아서,
함수 안에서 indirection을 한번 하면 배열, indirection 한번 더 하면 배열 안의 구조체,
대입되어있는 문자열이 Readonly 이므로 scanf로 해당 주소에 저장을 못하니,
strcpy() 이용.
제가 의도한대로 구현이 된건지 도움 부탁드립니다!
코드 첨부합니다 ( 코드 일부만 올렸는데 필요하시면 다 올리도록 하겠습니다!)
답변 2
1
별다른 오류나 예외가 없었다면 잘 구현하신 것 같아요!
그래도 혹시 모르니 여러 케이스들로 테스트 한번 해보세요 화이팅! 😀
(여담으로 이 강의 후에 이어지는 교수님의 자료구조 강의의 1강에서 이중 포인터로 비슷한 프로그램 구현하는 것도 나와요. 해당 강의에서 참고해보셔도 될 것 같아요! 따배C 수강평 남기면 무료로 수강 할 수 있다고 알고 있습니다.)
0
감사합니다!!!!!!!!!
아, 위에서 얘기한 강의 중의 read_books2 코드에서,
*books_dptr = books; 로 구현된 부분이
books_dptr = &books; 로 대체가 가능할까요?
두 문장이 혹시 차이가 있을까요 ?!