我需要读取一个文件并将其中的文本发送到一个字符串,以便我可以解析它。但是,程序不会确切知道文件有多长,所以如果我想使用我该怎么办fgets()
,或者有更好的选择吗?
Note:
char *fgets(char *str, size_t num, FILE *stream);
别忘了fgets()一次读取一行,前提是有足够的空间。
人类写的行很少长于……80、256,选择一个数字……字符。 POSIX 建议行长度为 4096。所以,我通常使用:
char buffer[4096];
while (fgets(buffer, sizeof(buffer), fp))
{
...process line...
}
如果您担心有人可能会在一行中提供超过 4K 的数据(机器生成的文件,例如 HTML 或 JSON,可能包含该数据),那么您必须决定下一步要做什么。您可以执行以下任一操作(可能还有一些我没有提到的其他选项):
- 按位处理过长的行,而不假设中间有换行符。
- 为较长的行分配内存(例如从 8K 开始),将初始的 4K 复制到分配的缓冲区中,然后将更多数据读取到缓冲区的后半部分中,迭代直到找到行尾。
- 使用 POSIX 2008 函数getline()它可以在 Linux 上使用。它为你分配内存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)