c语言中printf函数的意外行为
我最近遇到了一个面试问题。我不理解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。嗯:
#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;
}