[英]Reading from file in C using fread
我正在學習如何從C語言的文件中讀取內容。並且設法抓取以下代碼。
#include <stdio.h>
#include <stdlib.h>
void read_content(FILE *file) {
char *x = malloc(20);
// read first 20 char
int read = fread(x,sizeof(char),20,file);
if (read != 20) {
printf("Read could not happen\n");
}
else {
printf("the content read is %s",x);
}
free(x);
return;
}
int main(int argc,char *argv[]) {
FILE *fp;
fp = fopen("test.txt","w+");
read_content(fp);
fclose(fp);
return 0;
}
但是由於某種原因(我無法理解),我將read
字節數視為0
。
問題是您使用w+
模式打開文件。 有兩種可能性:
fread()
返回0。 fread()
返回0。 如果只想讀取文件(按照您的示例),請在模式r
打開它。 如果您想在不破壞其現有內容的情況下進行讀寫,請使用模式r+
。
無論選擇哪種模式,請始終檢查fopen()
返回非null,如果返回null則顯示錯誤(這不是問題的原因,而是最佳實踐)。
從手冊頁 w+
標志:
開放供閱讀和寫作。 如果該文件不存在,則創建該文件,否則該文件將被截斷。
您可能正在嘗試打開您提供的路徑中不存在的文件,或者如@WhozCraig在注釋中建議的那樣為read-only
。 這意味着正在創建一個新文件,一個空文件! 因此,您看到0
字節的讀取。
綜上所述, fopen
失敗,在這種情況下,您需要檢查返回值是否等於-1
。
要了解什么是錯誤,你可以檢查errno
,因為它被設置為顯示錯誤。
如果只打算讀取,請使用r
標志而不是w+
打開文件
問題在於以下代碼行:
fp = fopen("test.txt","w+")
在"w+"
模式下,清除文件的先前內容,並且僅在不寫入任何內容的情況下讀取文件時,文件將為空。 因此,它正在打印"Read could not happen"
因為您正在嘗試讀取一個空文件。
如果您願意讀取然后寫入文件,我建議您使用"r+"
模式。 否則, r
模式足以簡單讀取文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.