【问题标题】:Why does C puts appends a newline while fputs doesn't?为什么 C puts 附加换行符而 fputs 没有?
【发布时间】:2020-05-17 13:59:09
【问题描述】:

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

puts() 函数应将s 指向的字符串,后跟<newline>,写入标准输出流stdout

putsfputs 之间行为差异的原因是什么?

【问题讨论】:

  • 可能是因为标准输出默认是行缓冲的,当它到达换行符时会打印。比手动刷新或添加新行更方便。
  • 这主要是一个“这就是它在 70 年代后期的设计方式”的问题。 gets()fgets() 之间存在类似的差异。但是,出于可靠的安全原因,gets() 不再是标准 C 的一部分,所以幸运的是,您并没有意识到这一点,最好保持这种状态。

标签: c puts fputs


【解决方案1】:

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

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

【讨论】:

  • 听起来很合理,谢谢。我只希望行为上的差异反映在命名中。
猜你喜欢
  • 2018-12-18
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多