当我使用“fgets'”的关键字进行搜索时和'换行符#,有许多关于如何删除尾随换行符的帖子(这种删除似乎是一种负担)。然而,似乎很少有关于如何将新线用于包含fgets的必要性的解释。同样在C ++中,' std :: getline'和' std :: istream:getline'方法不会保留换行符。那有什么理由吗?
答案 0 :(得分:3)
这是令人满意的(恕我直言)解释:
http://www.cplusplus.com/reference/cstdio/fgets/
特别是:
换行符使fgets停止读取,但它被函数视为有效字符,并包含在复制到str的字符串中。
答案 1 :(得分:2)
不,它没有必要,但如果存在,它将包含在返回的行中。
在
EOF
或换行符后停止阅读。如果读取换行符,则将其存储到缓冲区中。终止空字节('\0'
)存储在缓冲区中的最后一个字符之后。
这就是为什么它的行为方式。
请注意,您无法假设缓冲区中有最后一行换行符,您必须在删除之前进行检查,否则如果没有,则可能会截断最后一行有一个换行符。