C 从txt文件读入动态分配

C 从txt文件读入动态分配,c,file-io,struct,dynamic-memory-allocation,C,File Io,Struct,Dynamic Memory Allocation,我想从txt文件中读取一些数据,并将其存储在s_person结构中,然后打印出来。 文本文件结构如下所示: john 43 23 steven 23 44 micheal 11 0 main() { int number = 2; s_person *person = construct(number); getData(person, number); printData(person, number); free(person); } 变量数组用于

我想从txt文件中读取一些数据,并将其存储在s_person结构中,然后打印出来。 文本文件结构如下所示:

john 43 23
steven 23 44
micheal 11 0
main()
{
    int number = 2;
    s_person *person = construct(number);
    getData(person, number);
    printData(person, number);
    free(person);
}
变量数组用于txt文件中名称旁边的2个数字

#include<stdio.h>
#include<stdlib.h>

struct s_person {
    char *name;
    int *array;
};
下面是从txt文件读取数据的函数。它似乎在第二次运行时在
中中断,而在
fscanf(f,“%s”,osoba[i].name)中循环如果我必须阅读多行

 void getData(s_person *person, int number) {
        FILE *f = fopen("text.txt", "r");
        if(f == NULL){
            printf("Error\n");
            return;
        }
        int i=0, j;
        while(i < number)
        {   
            fscanf(f,"%s", person[i].name); // Break point at second loop through

            // Read numbers from txt file
            for(j=0; j<2; j++){
                fscanf(f, "%d", &person[i].array[j]);
            }
            if(feof(f)){
                break;
            }
            i++;
        }

        fclose(f);
    }
我想这是fscanf函数的问题,我做错了,但我不知道是什么


如果我有一行数据要读取,它就可以完美地工作。(
int number=1;
)。但是,如果它必须读取多行,它会在第二次运行时中断,而循环位于
fscanf(f,“%s”,osoba[i].name)

对于
s_人员的每个
编号
,需要为
姓名
数组
分配内存

s_person* construct(int number){
    int each;
    s_person *person = (s_person*)malloc(sizeof(s_person) * number);
    if ( person) {
        for (each = 0; each < number; each++){
            person[each].name = (char*)malloc(sizeof(char) * 50);
            person[each].array = (int*)malloc(sizeof(int) * 2);
        }
    }
    return person;
}
s_person*构造(整数){
int每个;
s_person*person=(s_person*)malloc(sizeof(s_person)*编号);
如果(人){
对于(每个=0;每个<数字;每个++){
每人姓名=(字符*)malloc(字符大小)*50;
person[each]。数组=(int*)malloc(sizeof(int)*2);
}
}
返回人;
}

谢谢。现在可以了。只是一个语法更改:它显示person[each]->name的错误,但是person[each].name可以正常工作
main()
{
    int number = 2;
    s_person *person = construct(number);
    getData(person, number);
    printData(person, number);
    free(person);
}
s_person* construct(int number){
    int each;
    s_person *person = (s_person*)malloc(sizeof(s_person) * number);
    if ( person) {
        for (each = 0; each < number; each++){
            person[each].name = (char*)malloc(sizeof(char) * 50);
            person[each].array = (int*)malloc(sizeof(int) * 2);
        }
    }
    return person;
}