c - 为具有空终止字符的 fgets 分配内存字符串

标签 c string null fgets

如果这个问题看起来“简单”,我真的很抱歉,但我无法在任何地方找到答案。 我尝试使用 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/

相关文章:

c - 这段代码究竟有什么问题......?

C5029 (E) 需要一个表达式

Android 自定义微调器未填充

c++ - std::to_string 存储在 const char*

c# - 用于操作文本的小型 Java 或 C# 片段

mysql - 如何添加一个带整数的空字段?

c - 如何将一个变量的数组替换为另一个变量的数组?

if-statement - IF AND 公式与 IS NOT NULL 在 Excel 中

javascript - 如何创建一个 if 语句来检查值变量是否全部非空?

c - 如何为矩阵乘法器 C 程序获取未知矩阵的正确维数?