为什么 C puts 会追加一个换行符而 fputs 不会?

Why does C puts appends a newline while fputs doesn't?

C 标准提供了两个函数,puts and fputs,其中 puts(s) 的行为与 fputs(s, stdout) 相同,只是它额外附加了一个换行符:

The puts() function shall write the string pointed to by s, followed by a <newline>, to the standard output stream stdout.

putsfputs 之间存在这种行为差异的原因是什么?

puts 函数专门写入 stdout ,通常是控制台。因为控制台输出通常是行缓冲的,所以不必显式向要打印的字符串添加换行符很方便。

fputs 函数可以写入任何给定的 FILE 对象,而不仅仅是 stdout,因此通过不自动添加换行符,它使函数在一般情况下更加灵活。