【发布时间】:2023-03-09 07:42:01
【问题描述】:
我正在尝试用 C 语言编写一个从输入文件(“input0”)读取的程序,该文件遵循以下格式: 约翰·多伊 1230 4.0
我正在尝试使用 fscanf 从文档中读取并将这些值输入到结构中。但目前,在编译并运行代码后,我遇到了神秘的“分段错误(核心转储)”。
我的代码中当前发出此错误的行是带有 fscanf 语句的行。我找不到解决办法。
此外,strcpy 在取消注释后会报错。我在运行代码时收到警告,我认为这与什么是指针和什么是字符串存在差异,这是我无法解决的另一个问题。任何帮助将不胜感激。
typedef struct {
char fname[1000];
char lname[1000];
long int id;
double gpa;
} student_t;
int main(int argc, char *argv[]) {
FILE *db;
student_t students[1000];
char* fname[1000];
char* lname[1000];
long int id[1000];
double gpa[1000];
long int i, j;
i = 0;
db = fopen("input0", "r");
while(fscanf(db, "%s %s %d %lf", fname[i], lname[i], id[i], gpa[i]) != EOF) {
//strcpy(students[i].fname, fname[i]);
//strcpy(students[i].lname, lname[i]);
students[i].id = id[i];
students[i].gpa = gpa[i];
i++;
}
for(j = 0; j <= i; j++) {
//printf("%s %s %d %f\n", _SJ.fname, _SJ.lname, _SJ.id, _ST.gpa);
}
fclose(db);
}
【问题讨论】:
-
从文件中读取的方式非常脆弱,请改用 fgets/sscanf alt。 fgets/strtok.
标签: c pointers segmentation-fault scanf