c++ - 相当于缓冲区上的 fgets?

标签 c++ c io fgets

我最初使用 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/

相关文章:

c - C 中的二维动态数组 : Which of those 3 snippets gets executed faster?

java - 如何从txt中读取行?

c++ - 并行插入映射

使用 STL 开始和结束设置的 C++ 指针数组

c - FFMPEg 和 gcc 问题

c - X11 如何使用 xcb 恢复/启动另一个应用程序窗口?

python-3.x - 如何下载并阅读已发表的文章?

c# - 在没有 ToList() 的情况下运行时,在 Linq 的 SelectMany() 中读取文件会抛出 System.IO.IOException

c++ - .读入实数,直到找到 10 个正值。写出 10 个正数的总和

c++ - operator<< 函数的返回值