或等效,
puts()
附加一个尾随新行?输出字符串时,可以使用两个类似的函数:fputs()
和puts()
。
puts()
会自动在结尾添加新行,但fputs()
不会。
这种不一致背后有什么原因吗?我的意思是,调用printf(fmtstr, ...)
和fprintf(stdout, fmtstr, ...)
具有相同的行为。为什么puts(str)
和fputs(str, stdout)
也不应该如此?
是因为向后兼容,还是有充分理由以这种方式实现它们?
答案 0 :(得分:2)
gets()
和puts()
应该用于终端的简单输入/输出,而fgets()
和fputs()
更通用,并提供更好的控制:您可以指定流并且它们不执行任何隐式换行处理。
遗憾的是gets()
被严格指定并为如此多的缓冲区溢出铺平了道路。它最终从最新的C标准中删除。
答案 1 :(得分:1)
puts
写入标准输出,“每个人都知道”是你的面向行的终端,而fputs
可以写入一个没有这种含义的文件。特别是,它比组合strlen
和fwrite
更方便。
gets
(现已弃用)与fgets
之间保持相同的关系。