C fgets与fgetc的阅读线

nc3*_*c3b 11 c io stdio fgets fgetc

我需要读取一行文本(由换行符终止),而不对长度做出假设.所以我现在面对各种可能性:

  • fgets每次使用并检查最后一个字符是否为换行符并连续附加到缓冲区
  • 使用fgetc偶尔realloc使用缓冲区读取每个字符

Intuition告诉我fgetc变体可能会变慢,但是我再也看不出如何fgets在不检查每个角色的情况下做到这一点(我的直觉也不总是那么好).线条非常大,因此性能很重要.

我想知道每种方法的优缺点.先感谢您.

Jon*_*ler 4

我建议结合使用动态内存分配 - 或者您可以研究POSIX 2008 标准中的fgets()接口,并且可以在更新的 Linux 机器上使用。getline()这会为你完成内存分配的工作。您需要密切关注缓冲区长度及其地址 - 因此您甚至可以自己创建一个结构来处理信息。

虽然fgetc()也能工作,但稍微麻烦一点——但也只是稍微麻烦一点。在幕后,它使用与 相同的机制fgets()。内部可能能够利用更快的操作 - 类似于strchr()- 当您直接调用时不可用fgetc()