gpt4 book ai didi

C fgets 没有得到全文

转载 作者:太空宇宙 更新时间:2023-11-04 02:10:07 25 4
gpt4 key购买 nike

当我使用这段代码时

char *openFile(const char file[1024]){
FILE *f = fopen(file, "r");
char c[1000];
char *d;
if (f!=NULL) {
if (fgets(c, 1000, f) !=NULL){
d = c;
}
else{
d = "No text";
}
}
else{
d="error";
printf("%s", d);
}
fclose(f);

return d;
}

例如,获取这么长的文本

fosndjfnsondfnsnkdfsjndfoweoingfoweljksdnflwkengdfwoensldkfwejlnfkdlskdfnlskdnflskdnflksndlfknslkdnflkndlknfslnlfjnlksdnjfnjwnejnfwenfnjwenlfodnakdoifnkleroglknerolkdfgnrkldsfgnlskdfgnlksdfglndlfkngkldnslkgnlkfdnkglnklsndfklnglfdlskgknllkdglksdfkkngkresoirigknlsdf

(这个文本没有任何意义,它只是一个测试)然后我返回 char *d; 它输出这个

fosndjfnsondfnsnkdfsjndfoweoingfoweljksdnflwkengdfwoensldkfwejlnfkdlskdfnlskdnflskdnflksndlfknslkdnflkndlknfslnlfjnlksdnjfnjwnejnfwenfnjwenlfodnakdoifnkleroglknerolkdfgnrkldsfgnlskdfgnlksdfglndlfkngkldnslkgnlkfdnkglnklsndfklnglfdlskgknllkdglksdfkkngkresoir¯ˇˇˇˇˇˇˇv”[

为什么最后会有那些奇怪的字符?

最佳答案

您已将 c 定义为 openFile 中的局部变量。假设您的读取成功,您将在 d 中返回它的地址。它在 openFile 结束时被销毁,所以 d 变成了一个悬空指针。在 openFile 返回结果后尝试使用它会导致未定义的行为。

可能的解决方法包括将 c 定义为 static,然后返回一个用 malloc 分配的缓冲区。将 c 定义为 static 有很多陷阱,尤其是当/如果涉及多线程时,因此动态分配通常会更干净一些。

关于C fgets 没有得到全文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15312770/

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