char s[100]={0};
fgets(s, sizeof(s), stdin);
在上面的代码中,这三个之间有什么区别?
printf("%s",s);
printf(s);
fputs(s,stdout);
答案 0 :(得分:3)
printf("%s",s);
是正确的,但是printf是一个非常繁重的函数,如果格式字符串以'\ n'
printf(s);非常危险,因为格式字符串可能包含%
,然后它会期望另一个参数。如果发生这种情况,那就是UB。这也使您的代码容易被利用
fputs(s,stdout);好。不如printf重,但是会添加新行
答案 1 :(得分:2)
#2应该从不使用。我什至不会在这里写。引入有害字符会引入特殊字符,从而在您的系统中做非常糟糕的事情。 gcc
的新版本会警告您该错误。
之间的区别
printf("%s", s);
和
puts(s)
是puts
将添加换行符,就像您调用了
printf("%s\n", s);
答案 2 :(得分:0)
如其他评论和答案所述,请勿尝试第二种选择。另外,第三个比第一个要轻。
但是,我仍然更喜欢第一个选项(printf()
函数),因为它允许您使用格式化的字符串,这意味着您可以使用此函数打印几乎所有数据类型,而函数{{1} }仅接受字符串。因此,在大多数情况下,必须先将字符串格式化(也许使用fputs
),然后再将其传递给函数!