char s[100]={0};
fgets(s, sizeof(s), stdin);
在上面的代码的情况下,正是这三者之间的区别?
printf("%s",s);
printf(s);
fputs(s,stdout);
printf("%s",s);
正确的,但printf的是一个非常沉重的功能,如果格式字符串“\ n”结尾大多数编译器实际上在编译器代码放更换%
,然后它会期待着另一个参数。如果碰巧是UB。这也使得你的代码开发容易#2不应该被使用。我甚至不会写在这里吧。一个邪恶的输入可通过引入特殊字符做的非常糟糕的事情在你的系统。 gcc
的新版本警告你这个bug。
printf("%s", s);
和puts(s)
之间的区别是,puts
将添加一个新行,就像如果你叫printf("%s\n", s);
至于其他的意见和答案中提到,不要试图在第二个选项。此外,第三个是比第一次轻相当。
不过,我还是比较喜欢第一个选项(printf()
功能),因为它可以让你有一个格式化字符串,这意味着你可以使用此功能打印出几乎任何数据类型,而功能fputs
只接受字符串。因此,在大多数情况下,你必须把它传递给函数之前首先格式化字符串(可能使用sprintf()
)!