我最初使用 fgets()
逐行解析文件。
现在我改变了一些东西,所以我已经把我的整个文件放在一个缓冲区里了。我仍然喜欢逐行读取该缓冲区以进行解析。是否有为此设计的东西,或者我是否需要制作一个循环来检查此时的 0x0A
char
?
最佳答案
memchr
(有一点你自己的包装代码,以 memcpy
结尾)是完全等价的 - 像 fgets
它需要一个它将处理的最大长度(应该是剩余输入缓冲区大小和输出缓冲区大小的最小值)并扫描直到它找到所需的字符(将是 '\n'
)或运行输入/输出空间不足。
请注意,对于已经在内存缓冲区中的数据,您可能希望跳过复制到单独输出缓冲区的步骤,除非您需要在不修改输入的情况下以 null 终止输出。许多初学 C 的程序员经常犯这样的错误,即认为他们需要空终止,而实际上只需要改进一些接口(interface)以采用(pointer, length) 对就足够了,允许您在不复制子字符串的情况下传递/处理它们。例如,您可以使用以下方法将它们传递给 printf
:printf("%.*s", (int)length, start);
关于c++ - 相当于缓冲区上的 fgets?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7455946/