vet*_*982 8 c c++ fstream fgets
我需要读取一个文件并将其中的文本发送到一个字符串,以便我可以解析它.但是,程序不会确切地知道文件的长度,所以如果我想使用fgets(),或者有更好的选择,我该怎么办?
注意:
char *fgets(char *str, size_t num, FILE *stream);
Run Code Online (Sandbox Code Playgroud)
Jon*_*ler 10
不要忘记,只要fgets()有足够的空间,一次读取一行.
人类很少写行超过... 80,256,选择一个数字......字符.POSIX建议行长度为4096.所以,我通常使用:
char buffer[4096];
while (fgets(buffer, sizeof(buffer), fp))
{
...process line...
}
Run Code Online (Sandbox Code Playgroud)
如果您担心某人可能在一行中提供超过4K的数据(并且机器生成的文件,例如HTML或JSON,可能包含该数据),那么您必须决定下一步该做什么.您可以执行以下任何操作(并且可能还有其他一些我未提及的选项):
getline()Linux上提供的POSIX 2008功能.它为你做内存分配.