繁体   English   中英

C fgets没有获得全文

[英]C fgets not getting full text

当我使用此代码时

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返回后尝试使用它会openFile未定义的行为。

可能的治疗包括将c定义为static ,并返回使用malloc分配的缓冲区。 c定义为static具有相当多的陷阱,特别是当涉及多线程时,因此动态分配通常更加清晰。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM