【发布时间】:2013-11-07 16:42:35
【问题描述】:
我是 C 的新手,正在尝试学习如何读取文件。我的文件是一个简单的文件(仅用于测试),其中包含以下内容:
this file
has been
successfully read
by C!
所以我使用以下 C 代码读取文件:
#include <stdio.h>
int main() {
char str[100];
FILE *file = fopen("/myFile/path/test.txt", "r");
if(file == NULL) {
puts("This file does not exist!");
return -1;
}
while(fgets(str, 100, file) != '\0') {
puts(str);
}
fclose(file);
return 0;
}
这样打印我的文本:
this file
has been
successfully read
by C!
当我编译并运行它时,我将它的输出通过管道传输到hexdump -C,并且可以在每行的末尾看到一个额外的0a。
最后,为什么我需要声明一个字符数组来从文件中读取?如果我不知道每行有多少数据怎么办?
【问题讨论】:
-
这不是读取文件的最佳方式。您可以使用
fseek和ftell查找整个文件的大小,然后使用fread一次将其全部读取到动态大小的数组中。 -
提供有用的错误信息:
file = fopen( path, mode ); if( file == NULL ) { perror( path ); exit( 1 ); }。这给出了文件的名称和失败的原因。 (“this”没有帮助,假设文件不存在不正确。) -
@WilliamPursell 谢谢你,我真的很想知道这一点,这将是我接下来要调查的事情。