c语言中printf函数的意外行为

c语言中printf函数的意外行为,c,printf,C,Printf,我最近遇到了一个面试问题。我不理解printf函数在这种情况下的行为 #include <stdio.h> int main() { int k = printf("String"); printf("%d",k); } 预期结果:编译错误 输出:String6 为什么输出字符串是6?这是printf的原型: 我们可以看到printf返回一个int 报告指出: 成功返回后,这些函数返回 打印的字符,不包括用于结束输出的空字节 字符串 您问为什么输出是String6。嗯:

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

 #include <stdio.h>
 int main() {
 int k = printf("String");
 printf("%d",k);
 }
预期结果:编译错误

输出:String6

为什么输出字符串是6?

这是printf的原型:

我们可以看到printf返回一个int

报告指出:

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

您问为什么输出是String6。嗯:

printf("String");
首先打印字符串,但不打印换行符。由于字符串是6个字符,printf返回6,存储在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;
}
printf函数返回它打印的字符数。由于设置了int k=printfString;,print函数正在执行打印字符串并将k设置为6,因为字符串长度为6个字符,然后对printf的第二次调用打印k的值,该值为6,导致控制台显示String6


这是非常有效的C语法。

预期结果:编译错误-为什么?代码是完全有效的,除了main应该是main之外。您不明白这其中的哪一部分?为什么输出是String6I?我正在等待有人提到缺少换行符:
printf("%d",k);
#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;
}