如果这个问题看起来“简单”,我真的很抱歉,但我无法在任何地方找到答案。 我尝试使用 fgets() 从文件中读取一行。 为了确保没有浪费空间,首先我找到了该行的长度:
do
{
c= getc(file);
words++;
}while (c!=EOF && c!='\n');
然后我为准确的字数分配了内存:
char* line = (char*)malloc(sizeof(char)*(words));
然后,我使用 fgets() 将行读取到行缓冲区。 但问题是,这是有效的。 但我一直认为你也应该为空终止字符分配内存。 那么这里发生了什么?
最佳答案
您确实需要为空终止符分配空间。这有效的事实并不意味着它总是有效(至少在 C 中)。
此外,fgets
还返回 \n
字符。所以你需要两个额外的字符。一个用于 \n
,一个用于 \0
。
不过我会推荐这种方法:
char buffer [1024];
if ( fgets (buffer, 1024, f) != NULL ) {
// so something with buffer
}
关于c - 为具有空终止字符的 fgets 分配内存字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25353512/