inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

241

m1n_q

작성한 질문수 24

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() 이용.

제가 의도한대로 구현이 된건지 도움 부탁드립니다!

코드 첨부합니다 ( 코드 일부만 올렸는데 필요하시면 다 올리도록 하겠습니다!)

c

답변 2

1

안소

별다른 오류나 예외가 없었다면 잘 구현하신 것 같아요! 

그래도 혹시 모르니 여러 케이스들로 테스트 한번 해보세요 화이팅! 😀

(여담으로 이 강의 후에 이어지는 교수님의 자료구조 강의의 1강에서 이중 포인터로 비슷한 프로그램 구현하는 것도 나와요. 해당 강의에서 참고해보셔도 될 것 같아요! 따배C 수강평 남기면 무료로 수강 할 수 있다고 알고 있습니다.)

0

m1n_q

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

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

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

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

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

완전히 똑같이 따라해도 exe파일이 안만들어져서 실행이 안됩니다.

1

47

3

main 함수에서 왜 int만 선언이 되는걸까요

1

52

2

8비트 2진수 변환시 왜 1을 더해야하나요?

1

53

2

혹시 강의를 빠르게 수강하려면 어디서부터 듣는게 좋을까요?

1

46

1

프로토타입과 함수간의 인자 불일치

1

72

2

12.12 헤더 관련 질문

1

59

2

Visual Studio Community 2026 사용 문의

1

134

2

Q. 15:30, 부호가 있는 8비트 정수 질문

1

59

2

getchar(), putchar()

1

92

3

강의자리ㅛ

1

78

2

비주얼스튜디오코드로 공부해도 상관없나요?

1

112

2

소스파일안에 여러 파일

1

74

2

F5와 F7의 차이

1

75

2

c = TWO * (a+b); 에서 a와 b는?

1

58

2

; 세미콜론을 붙이는 기준에 문의

1

68

1

Step over 기능 문의

1

52

2

2.6 강의 따옴표 출력 규칙 문의

1

74

2

int main 함수 관련 오류 문의

1

67

2

13.4 words[0]

0

60

2

11.7 함수를 구현해 봤습니다.

1

62

2

11.6 직접 strcmp와 strncmp를 구현해 보았습니다.

1

64

2

11.6 my_strcat과 my_strncat을 구현해봤습니다.

1

53

2

11.6 fit_str함수를 구현해 봤습니다.

1

53

2

11.5 코드 구현

1

67

2