Byo*_*Tic 1 c string null fgets
如果这个问题看起来“简单”,我真的很抱歉,但我在任何地方都找不到答案。我尝试使用 fgets() 从文件中读取一行。为了确保没有空间被浪费,首先我找到了线的长度:
do
{
c= getc(file);
words++;
}while (c!=EOF && c!='\n');
Run Code Online (Sandbox Code Playgroud)
然后我为精确的单词数分配了内存:
char* line = (char*)malloc(sizeof(char)*(words));
Run Code Online (Sandbox Code Playgroud)
然后,我使用 fgets() 将行读取到行缓冲区。但问题是,这是有效的。但我一直认为你也应该为空终止字符分配内存。那么这里发生了什么?
您确实需要为空终止符分配空间。这有效的事实并不意味着它总是会(至少在 C 中)。
另外,fgets还返回\n字符。所以你需要两个额外的字符。一为\n一为\0。
不过,我会推荐这种方法:
char buffer [1024];
if ( fgets (buffer, 1024, f) != NULL ) {
// so something with buffer
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1269 次 |
| 最近记录: |