인프런 커뮤니티 질문&답변

m1n_q님의 프로필 이미지
m1n_q

작성한 질문수

홍정모의 따라하며 배우는 C언어

14.14 구조체 파일 입출력 연습문제

안녕하세요, 이중 포인터 코드 질문 드립니다..

작성

·

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

m1n_q님의 프로필 이미지
m1n_q
질문자

감사합니다!!!!!!!!!

아, 위에서 얘기한 강의 중의 read_books2 코드에서,

*books_dptr = books; 로 구현된 부분이

books_dptr = &books; 로 대체가 가능할까요?

두 문장이 혹시 차이가 있을까요 ?!

m1n_q님의 프로필 이미지
m1n_q

작성한 질문수

질문하기