函数原型
int puts(const char *s);
int printf(const char * restrict format, ...);
区别
相同点:都是将字符串输出到标准输出
不同点:
- puts 直接输出字符串,并追加一个换行,不对字符串进行解析。优点是效率高,缺点是需要记住它会在结尾追加换行。
- printf 对字符串进行解析,然后将字符串格式化输出,
puts(str);
/* 等价于 */
printf("%s\n", str);
从防御式编程来说,不要采取下面的格式:
printf(str);
/* 采取这种格式,gcc 会产生一个警告 */
warning: format not a string literal and no format arguments [-Wformat-security]
示例
比如如下情况:
char *str = "hello %e";
puts(str);
printf("%s\n", str);
printf(str);
输出为:
hello %e
hello %e
hello 6.916746e-310