gpt4 book ai didi

c - 处理结构体数组时出现段错误

转载 作者:行者123 更新时间:2023-11-30 14:25:39 28 4
gpt4 key购买 nike

我创建了一个结构体,它有它的 id 号、它的值和它的状态。我有一个由数据组成的文件(1 199 0 2 199 1...) 1 是数字,199 是值,0 是状态,继续这样...我使用了 1 个名为 filldata() 的函数一次读取 3 个数字,例如 1 199 0,然后将其放入结构体数组的传递元素中。然后,我使用另一个函数来调用 this 函数来填充结构体数组。fillAll 函数将返回从文件复制到结构体数组的数据集但我收到了段错误。知道为什么吗?代码解释得更好:

int filldata(struct Data_point *a, const char *filelocation)  
{

FILE *f;
if((f=fopen(filelocation,"r"))==NULL)
printf("You cannot open");

if( fscanf(f, "%ld%lf%d", &(a->sampleNumber), &(a->value), &(a->status)) == 3)
return 1;
else
return 0;
}

int fillAll(struct Data_point *a, const char *filelocation)// I will pass the struct array and the location of my file string
{
int index=0;
while(filldata(&a[index], filelocation))
index++;

return index;
}

最佳答案

您重复打开文件名filelocation,但从未关闭文件句柄f。您将一遍又一遍地阅读第一行,最终耗尽文件句柄。

您可以更改 filldata 以获取文件指针,检查我添加的下面的代码片段一些额外的检查,您还需要检查 Data_point *a 的大小是否在填充时分配的范围

int filldata(struct Data_point *a, File *f) 


if( fscanf(f, "%ld%lf%d", &(a->sampleNumber), &(a->value), &(a->status)) == 3)
return 1;
else
return 0;
}

int fillAll(struct Data_point *a, const int data_point_size,const char *filelocation)// I will pass the struct array and the location of my file string
{

FILE *f;
if((f=fopen(filelocation,"r"))==NULL) {
printf("You cannot open");
return 0;
}


int index=0;
while(index < data_point_size && filldata(&a[index])) {
index++;
}
fclose(f);
return (index != data_point_size);
}

关于c - 处理结构体数组时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10146637/

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