繁体   English   中英

C中printf函数的异常行为

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM