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