我最近遇到一个面试问题。在这种情况下,我不了解printf
函数的行为
#include <stdio.h>
int main() {
int k = printf("String");
printf("%d",k);
}
预期结果:编译错误
输出:String6
为什么输出String6
?
答案 0 :(得分:6)
这是printf
的原型:
int printf(const char *format, ...);
我们可以看到printf
返回了int
。
成功返回后,这些函数返回的数量 打印的字符(不包括用于结束输出到的空字节) 字符串)。
您询问为什么输出为“ String6”。好吧:
printf("String");
这首先打印String
,但是不打印换行符。由于String
是6个字符,因此printf
返回6,并将其存储在k
中:
printf("%d",k);
然后打印6
(在同一行上)。
尝试运行该程序:
#include <stdio.h>
int main(void)
{
int bytes_printed = printf("%s\n", "String");
// 7 = 1 + 6
printf("printf returned: %d\n", bytes_printed);
return 0;
}
输出:
String
printf returned: 7
答案 1 :(得分:4)
printf()
函数返回其打印的字符数。由于您设置了int k = printf("String");
,所以打印功能正在执行打印出“ String”并将k
设置为等于6,因为“ String”的长度为6个字符,因此您对printf
的第二次调用将打印出k
的值为6,导致控制台显示“ String6”。
这是完全有效的C语法。