gpt4 book ai didi

c - C 中的指针数组和段错误(核心转储)

转载 作者:行者123 更新时间:2023-11-30 19:20:40 26 4
gpt4 key购买 nike

我正在尝试用 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);
}

最佳答案

当您声明例如时

char* fname[1000];

你有一个1000未初始化指针的数组。尝试使用这些指针之一将导致未定义的行为。您需要为指针分配内存,或将它们指向其他(已分配的)内存。

事实上,我认为你真正想做的是

fscanf(db, "%s %s %d %lf",
students[i].fname, students[i].lname, &students[i].id, &students[i].gpa)
<小时/>

我还建议您阅读例如this fscanf reference ,因为 fscanf 可以返回其他值,这意味着输入中存在错误(例如,如果输入文件格式错误)。

关于c - C 中的指针数组和段错误(核心转储),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21772099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com