char s[100]={0};
fgets(s, sizeof(s), stdin);
在上面代码的上下文中,这三者有什么区别?
printf("%s",s);
printf(s);
fputs(s,stdout);
printf("%s",s);
正确,但 printf 是一个非常繁重的函数,如果格式字符串以 '\n' 结尾,大多数编译器实际上会将其替换为编译器代码中的 puts
printf(s); 非常危险,因为格式字符串可能包含%
然后它会期望另一个参数。如果发生它是UB。它还使您的代码容易被利用
fputs(s,stdout); 好的。不如 printf 重,但会添加新行
#2永远不应该使用。我什至不会在这里写。通过引入特殊字符,邪恶的输入会在您的系统中造成非常糟糕的事情。新版本gcc
警告您有关此错误。
printf("%s", s);
和
之间的区别在于
puts(s)
它puts
会添加一个换行符,就像你打电话一样
printf("%s\n", s);
正如其他评论和答案所提到的,不要尝试第二个选项。此外,第三个比第一个轻得多。
但是,我仍然更喜欢第一个选项(printf()
函数),因为它允许您使用格式化的字符串,这意味着您可以使用此函数打印出几乎任何数据类型,而该函数fputs
只接受字符串。因此,在大多数情况下,您必须先格式化字符串(可能使用sprintf()
),然后再将其传递给函数!