为什么fputs()不附加尾随新行?

时间:2015-05-02 21:50:45

标签: c

或等效,

为什么puts()附加一个尾随新行?

输出字符串时,可以使用两个类似的函数:fputs()puts()

输出时,

puts()会自动在结尾添加新行,但fputs()不会。

这种不一致背后有什么原因吗?我的意思是,调用printf(fmtstr, ...)fprintf(stdout, fmtstr, ...)具有相同的行为。为什么puts(str)fputs(str, stdout)也不应该如此?

是因为向后兼容,还是有充分理由以这种方式实现它们?

2 个答案:

答案 0 :(得分:2)

gets()puts()应该用于终端的简单输入/输出,而fgets()fputs()更通用,并提供更好的控制:您可以指定流并且它们不执行任何隐式换行处理。

遗憾的是gets()被严格指定并为如此多的缓冲区溢出铺平了道路。它最终从最新的C标准中删除。

答案 1 :(得分:1)

puts写入标准输出,“每个人都知道”是你的面向行的终端,而fputs可以写入一个没有这种含义的文件。特别是,它比组合strlenfwrite更方便。

gets(现已弃用)与fgets之间保持相同的关系。