我需要阅读一个可能包含长行文本的文本文件。我在想最好的方法。考虑到效率,即使我在C ++中这样做,我仍然会选择C库函数来执行IO。
因为我不知道一行是多长时间,可能真的很长,我不想分配一个大数组,然后使用fgets
来读取一行。另一方面,我确实需要知道每条线的结束位置。一个用例是计算每行中的单词/字符。我可以分配一个小数组并使用fgets
进行阅读,然后确定该行中是否显示\r,
\n
或\r\n
来判断整行是否有已被阅读但这涉及很多strstr
次调用(对于\r\n
,或者有更好的方法?例如来自fgets的返回值?)。我也可以fgetc
一次读取每个字符。但是这个功能有缓冲吗?
请建议比较执行此任务的这些或其他不同方式。
答案 0 :(得分:2)
执行I / O的正确方法取决于您要对数据执行的操作。如果你在计算单词,基于行的输入没有多大意义。更自然的方法是使用fgetc并一次处理一个角色让stdio担心缓冲。只有当你需要同时处理内存中的整行才能处理它时,你应该实际分配一个足够大的缓冲区来容纳它。