相当于缓冲区上的fgets?

问题描述 投票:5回答:4

我最初使用fgets()逐行解析文件。

现在我改变了一些东西,以便我已将整个文件放在缓冲区中。我仍然想逐行读取缓冲区以进行解析。有没有为此设计的东西,或者我是否需要制作一个循环来检查0x0A chars?

c++ c io fgets
4个回答
6
投票

memchr(带有一点你自己的包装代码,以memcpy结尾)是完全等价的 - 就像fgets它需要处理的最大长度(应该是剩余输入缓冲区大小的最小值和输出缓冲区的大小)并扫描,直到它达到所需的字符(将是'\n')或用完输入/输出空间。

请注意,对于已存在于内存缓冲区中的数据,您可能希望跳过复制到单独输出缓冲区的步骤,除非您需要在不修改输入的情况下对输出进行空终止。许多初学C程序员经常犯错误,认为他们需要空终止,只需改进一些接口来获取(指针,长度)对就足够了,允许你传递/处理子串而不复制它们。例如,你可以使用:printf将它们传递给printf("%.*s", (int)length, start);


2
投票

您可以使用sscanf函数。如果你真的需要整行,那么这样的事情应该可以解决问题:

sscanf(your_buffer, "%50[^\n]", line);

(这将读取最多50个字符的行。一如既往,小心长度和0终止符。并检查sscanf的返回值,以防出现问题。)

您可以使用指针算术来移动缓冲区(只需添加“返回”行长+ 1)。


0
投票

有sscanf可能适用于您,也可能不适合您。


0
投票

如果您正在寻找C函数,strtok()strsep()将在指定字符上分割字符串。

© www.soinside.com 2019 - 2024. All rights reserved.