簡體   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