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

在上面代码的上下文中,这三者有什么区别?

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

3 回答 3

3
  1. printf("%s",s);正确,但 printf 是一个非常繁重的函数,如果格式字符串以 '\n' 结尾,大多数编译器实际上会将其替换为编译器代码中的 puts

  2. printf(s); 非常危险,因为格式字符串可能包含%然后它会期望另一个参数。如果发生它是UB。它还使您的代码容易被利用

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

于 2019-02-04T09:15:11.270 回答
2

#2永远不应该使用。我什至不会在这里写。通过引入特殊字符,邪恶的输入会在您的系统中造成非常糟糕的事情。新版本gcc警告您有关此错误。

printf("%s", s); 和 之间的区别在于 puts(s)puts会添加一个换行符,就像你打电话一样 printf("%s\n", s);

于 2019-02-04T09:17:28.180 回答
0

正如其他评论和答案所提到的,不要尝试第二个选项。此外,第三个比第一个轻得多。

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

于 2019-02-04T09:53:53.457 回答