[英]Unexpected behaviour of printf function in c
我最近遇到一个面试问题。 在这种情况下,我不了解printf
函数的行为
#include <stdio.h>
int main() {
int k = printf("String");
printf("%d",k);
}
预期结果:编译错误
输出: String6
为什么输出String6
?
这是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
printf()
函数返回其打印的字符数。 由于您设置了int k = printf("String");
,由于“字符串”的长度为6个字符,因此打印功能正在执行“字符串”的打印并设置k
等于6,因此您对printf
的第二次调用将打印k
的值,即6,从而导致控制台显示“ String6”。
这是完全有效的C语法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.