我需要读取一个可能包含长行文本的文本文件。我正在考虑最好的方法来做到这一点。考虑到效率,即使我在C++中这样做,我仍然会选择C库函数来做IO。
因为我不知道一行有多长,可能真的很长,所以我不想分配一个大数组然后使用 fgets
来读取一行。另一方面,我确实需要知道每一行的结束位置。这样的一个用例是计算每行中的单词/字符。我可以分配一个小数组,用fgets
读取,然后判断是否有\r,
\n
, 或者\r\n
出现在行中以告知是否已读取整行。但这涉及到很多strstr
调用(对于\r\n
,或者有更好的方法?例如从fgets的返回值?)。我也可以执行 fgetc
来一次读取每个单独的字符。但是这个函数有缓冲吗?
请建议比较这些或其他完成此任务的不同方法。
最佳答案
执行 I/O 的正确方法取决于您要对数据执行的操作。如果您正在计算单词,基于行的输入没有多大意义。一种更自然的方法是使用 fgetc 并一次处理一个字符,让 stdio 担心缓冲。只有当您同时需要内存中的整行来处理它时,您才应该实际分配一个足够大的缓冲区来包含所有内容。
关于c - 在 C 中读取文本文件的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9057625/