是什么的printf(“%S”)的printf(S)和的fputs之间的区别?

问题描述 投票:0回答:3
char s[100]={0};
fgets(s, sizeof(s), stdin);

在上面的代码的情况下,正是这三者之间的区别?

  1. printf("%s",s);
  2. printf(s);
  3. fputs(s,stdout);
c printf fputs
3个回答
3
投票
  1. printf("%s",s);正确的,但printf的是一个非常沉重的功能,如果格式字符串“\ n”结尾大多数编译器实际上在编译器代码放更换
  2. printf的(一个或多个);很危险的,因为格式字符串可以包含%,然后它会期待着另一个参数。如果碰巧是UB。这也使得你的代码开发容易
  3. 的fputs(S,标准输出);好。不重如printf的,但将增加新的生产线

2
投票

#2不应该被使用。我甚至不会写在这里吧。一个邪恶的输入可通过引入特殊字符做的非常糟糕的事情在你的系统。 gcc的新版本警告你这个bug。

printf("%s", s);puts(s)之间的区别是,puts将添加一个新行,就像如果你叫printf("%s\n", s);


0
投票

至于其他的意见和答案中提到,不要试图在第二个选项。此外,第三个是比第一次轻相当。

不过,我还是比较喜欢第一个选项(printf()功能),因为它可以让你有一个格式化字符串,这意味着你可以使用此功能打印出几乎任何数据类型,而功能fputs只接受字符串。因此,在大多数情况下,你必须把它传递给函数之前首先格式化字符串(可能使用sprintf())!

© www.soinside.com 2019 - 2024. All rights reserved.