什么时候应该使用fputs而不是fprintf?

45
两者之间到底有什么区别?

20
不是要表现得很讨厌,但你查看了这两个函数的文档吗?一个执行格式化输出,另一个将字符串未格式化地输出到流中。你有具体的问题吗? - James McNellis
2
你的便携式C参考手册上写了什么? - John Bode
4
fputs(s, f)的功能与fprintf(f, "%s", s)等效。现代优化编译器将它们编译为相同的代码(调用fputs)。 - chqrlie
2
由于答案强调格式差异是一个重要的点(赞也显示对问题的兴趣),因此投票重新开放。 - Déjà vu
3个回答

47

fprintf 用于格式化输出。也就是说,它会读取并解释你提供的格式字符串,并将结果写入输出流。

fputs 只会将你提供的字符串直接写入指定的输出流。

fputs() 不需要解析输入的字符串,只需打印一个字符串即可。fprintf() 允许你在输出时进行格式化。


4
我可能错了,但如果您想打印由用户控制的字符串,fputs更安全。在StackOverflow上有很多帖子讨论这个问题。 - Greg0ry

15

正如其他评论者所指出的(并且从文档中显而易见),printf 的最大区别在于它允许格式化参数。

也许您想知道当没有向 printf() 传递额外参数时,这两个函数是否等效?很明显,它们不等效。

   char * str;
   FILE * stream;
   ...
   fputs(str,stream);    // this is NOT the same as the following line
   fprintf(stream,str);  // this is probably wrong
第二种方法可能是错误的,因为传递给 fprintf() 的字符串参数仍然是一个格式化字符串:如果它包含 '%' 字符,则会被解释为格式化说明符。功能上等效(但不够直观、高效和美观)的形式是:
   fprintf(stream,"%s", str);  

6

14
“puts” / “printf” 与“fputs” / “fprintf”并不是严格对应的。与其他函数不同,“puts”在输出时会添加一个“\n”。请注意,这里只涉及翻译,请不要提供任何额外的信息。 - Chris Lutz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接