나는 과제를 가지고 다소 방해가된다. 다음 코드는 파일에서 입력을 가져 와서 내가 정의한 구조체로 읽어 들이고 입력 행의 수에 제한없이 사용하도록되어 있습니다. 그 시점에서 나는 정적 배열을 사용하여 동적 크기 변경을 원하고 있지만,fscanf를 사용하여 동적 구조체 포인터 배열에 데이터를 입력 하시겠습니까?
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4
5 typedef struct __student {
6 int ID;
7 char fname[33];
8 char lname[33];
9 float grade;
10 } student;
11
12 void partA(FILE *fp) {
13
14 int i, r;
15 i = r = 0;
16 int N = 1000;
17 student **S;
18
19 S = (student **)malloc(sizeof(student *) * N);
20
21
22 while(!feof(fp)){
23 fscanf(fp, "%d %[^,], %s %f", &S[i]->ID, S[i]->lname, S[i]->fname, &S[i]->grade); // segfault occurs on this line
24 printf("%d %s %s %f\n", S[i]->ID, S[i]->fname, S[i]->lname, S[i]->grade);
25 i++;
26 printf("Something's happening, at least");
27 if(i == N){
28 N *= 2;
29 S = (student **)realloc(S, sizeof(student) * N);
30 if(S == NULL) {
31 printf("Memory reallocation failed; Fatal error.");
32 break;
33 }
34 }
35 }
36 }
내가 전에 코드를 테스트 : 그러나, 라인 에서 세그먼테이션 폴트 (segfault). 그러나 gdb조차도 줄 번호 외에도 거의 도움이되지 않습니다. 각각 학생 구조체를 개별적으로 malloc해야합니까, 아니면 완전히 다른 것을 놓치고 있습니까? 그래서이 문제를 해결 한 것으로 보인다
S[i] = (student *)malloc(sizeof(student));
:
편집 : 나는 통해 while 루프의 각 학생에 메모리를 할당 할 때 코드를 보인다 작동합니다. 확실히하기 위해 몇 가지 테스트를 해보겠습니다.
이상한 링크 목록 \ 2D 배열처럼 보입니다. 어느 쪽을 원하니? – andre
입력 줄의 형식을 설명해 주시겠습니까? ' "% d % [^,], % s % f"'왜'', ''로하고 있니? –
andre, 그건 감시 였고, 사과드립니다. 나는 LL 접근법을 일찍 시도했지만 그것이 내가 필요로하는 것이 아니라는 것을 발견했다. @ AdriánLópez 입력 데이터의 형식은, 입니다. 나는 단지 쉼표를 제거하기 위해 스캔 세트를 사용하고 있습니다. 그건 언급하지 않은 것에 대해 사과드립니다! –
user991710