在fgets中是否需要尾随换行符?

时间:2014-10-31 10:12:48

标签: c newline fgets

当我使用“fgets'”的关键字进行搜索时和'换行符#,有许多关于如何删除尾随换行符的帖子(这种删除似乎是一种负担)。然而,似乎很少有关于如何将新线用于包含fgets的必要性的解释。同样在C ++中,' std :: getline'和' std :: istream:getline'方法不会保留换行符。那有什么理由吗?

2 个答案:

答案 0 :(得分:3)

这是令人满意的(恕我直言)解释:
http://www.cplusplus.com/reference/cstdio/fgets/

特别是:

  

换行符使fgets停止读取,但它被函数视为有效字符,并包含在复制到str的字符串中。

答案 1 :(得分:2)

不,它没有必要,但如果存在,它将包含在返回的行中。

The manual page说:

  

EOF或换行符后停止阅读。如果读取换行符,则将其存储到缓冲区中。终止空字节('\0')存储在缓冲区中的最后一个字符之后。

这就是为什么它的行为方式。

请注意,您无法假设缓冲区中有最后一行换行符,您必须在删除之前进行检查,否则如果没有,则可能会截断最后一行有一个换行符。