c

时间:2019-04-05 20:47:26

标签: c printf

我最近遇到一个面试问题。在这种情况下,我不了解printf函数的行为

 #include <stdio.h>
 int main() {
 int k = printf("String");
 printf("%d",k);
 }

预期结果:编译错误

输出:String6

为什么输出String6

2 个答案:

答案 0 :(得分:6)

这是printf的原型:

int printf(const char *format, ...);

我们可以看到printf返回了int

documentation指示:

  

成功返回后,这些函数返回的数量          打印的字符(不包括用于结束输出到的空字节)          字符串)。


您询问为什么输出为“ 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语法。