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