printf(“%s”),printf(s)和fputs有什么区别?

时间:2019-02-04 08:54:13

标签: c printf fputs

char s[100]={0};
fgets(s, sizeof(s), stdin);

在上面的代码中,这三个之间有什么区别?

  1. printf("%s",s);
  2. printf(s);
  3. fputs(s,stdout);

3 个答案:

答案 0 :(得分:3)

  1. printf("%s",s);是正确的,但是printf是一个非常繁重的函数,如果格式字符串以'\ n'

  2. 结尾,大多数编译器实际上会将其替换为编译器代码中的puts。
  3. printf(s);非常危险,因为格式字符串可能包含%,然后它会期望另一个参数。如果发生这种情况,那就是UB。这也使您的代码容易被利用

  4. fputs(s,stdout);好。不如printf重,但是会添加新行

答案 1 :(得分:2)

#2应该从不使用。我什至不会在这里写。引入有害字符会引入特殊字符,从而在您的系统中做非常糟糕的事情。 gcc的新版本会警告您该错误。

之间的区别 printf("%s", s);puts(s)puts将添加换行符,就像您调用了 printf("%s\n", s);

答案 2 :(得分:0)

如其他评论和答案所述,请勿尝试第二种选择。另外,第三个比第一个要轻。

但是,我仍然更喜欢第一个选项(printf()函数),因为它允许您使用格式化的字符串,这意味着您可以使用此函数打印几乎所有数据类型,而函数{{1} }仅接受字符串。因此,在大多数情况下,必须先将字符串格式化(也许使用fputs),然后再将其传递给函数!