gpt4 book ai didi

在 c 中使用 fseek 后核心转储

转载 作者:太空宇宙 更新时间:2023-11-04 06:48:51 24 4
gpt4 key购买 nike

我编写了一段代码,但在处理某个函数的特定部分时遇到了一些问题。如果我添加 fseek 函数,我会得到“核心转储”,但如果我删除它,一切正常。

这是我的代码中有问题的部分:

    FILE* fe;

fe=fopen("fete","rb");
if (fe==NULL)
{
printf("eroare");
exit(1);
}

STUDENT* x;
int i;
long int nrfete=0;
**fseek(fe,0L,SEEK_END);**
printf("%ld",ftell(fe));
nrfete = ftell(fe)/sizeof(STUDENT);
x=(STUDENT*)malloc(nrfete*sizeof(STUDENT));

fread(&x,sizeof(STUDENT),nrfete,fe);
printf("%s",x[0].prenume);//pt verificare
fclose(fe);

来自 comment

typedef struct { 
char prenume[20];
char sex;
float nota;
} STUDENT;

最佳答案

特别是两个错误:

fread 完成之前,您必须 rewindfseek 文件回到开头。目前,它不会读取任何数据,因此分配的内存仍然包含垃圾值。

并且始终检查像 fread 这样的 I/O 函数的返回值,它会告诉您没有读取数据。

还有一个问题是传给fread的buffer应该是malloc得到的指针,而不是指针存放的地址。所以

fread(&x,sizeof(STUDENT),nrfete,fe);

应该是

if(fread(x, sizeof(STUDENT), nrfete, fe) != nrfete) {
// report error
}

关于在 c 中使用 fseek 后核心转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54336521/

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