【发布时间】:2014-10-31 10:12:48
【问题描述】:
当我使用 'fgets' 和 'newline' 关键字进行搜索时,有很多关于如何删除尾随换行符的帖子(这种删除似乎是一种负担)。然而,对于 fgets 如何必须包含该换行符,似乎几乎没有解释。同样在 C++ 中,'std::getline' 和 'std::istream:getline' 方法不会保留换行符。那么有什么原因吗?
【问题讨论】:
-
C 的原作者为什么决定包含换行符可能没有任何特殊的论据。它只是 - 这就是 fgets() 所做的。如果不包括换行符,就会有人问为什么不包括在内。
-
谢谢,不。我可以把它当作设计,只是个人觉得它可能不是一个好的。
-
注意:
fgets()将愉快地读取并放入其嵌入的缓冲区'\0'并因此读取 6char并形成像'A'、'B'、'C'、@ 这样的缓冲区987654327@、'D'、'\n'、'\0'。嫌疑人std::istream:getline也很好地读取了嵌入的'\0'。 IMO,fgets()不返回读取的长度是一个更大的缺陷。strlen()是不够的,因为它确实准确地报告了fgets()在所有情况下读取的数据。