[英]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.