我最初使用fgets()
逐行解析文件。
现在我改变了一些东西,以便我已将整个文件放在缓冲区中。我仍然想逐行读取缓冲区以进行解析。有没有为此设计的东西,或者我是否需要制作一个循环来检查0x0A
char
s?
memchr
(带有一点你自己的包装代码,以memcpy
结尾)是完全等价的 - 就像fgets
它需要处理的最大长度(应该是剩余输入缓冲区大小的最小值和输出缓冲区的大小)并扫描,直到它达到所需的字符(将是'\n'
)或用完输入/输出空间。
请注意,对于已存在于内存缓冲区中的数据,您可能希望跳过复制到单独输出缓冲区的步骤,除非您需要在不修改输入的情况下对输出进行空终止。许多初学C程序员经常犯错误,认为他们需要空终止,只需改进一些接口来获取(指针,长度)对就足够了,允许你传递/处理子串而不复制它们。例如,你可以使用:printf
将它们传递给printf("%.*s", (int)length, start);
您可以使用sscanf
函数。如果你真的需要整行,那么这样的事情应该可以解决问题:
sscanf(your_buffer, "%50[^\n]", line);
(这将读取最多50个字符的行。一如既往,小心长度和0
终止符。并检查sscanf
的返回值,以防出现问题。)
您可以使用指针算术来移动缓冲区(只需添加“返回”行长+ 1)。
有sscanf可能适用于您,也可能不适合您。
如果您正在寻找C函数,strtok()
和strsep()
将在指定字符上分割字符串。