You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

printf返回打印字符数的机制及GCC下代码结果11的疑问

为什么变量a的值是11而不是18?

嘿,我来帮你理清这个困惑——你把两次printf的输出字符数混在一起啦!咱们一步步拆解这段代码:

int a=printf("made,%d,easy",printf("Lucknow")); 
printf("%d",a);
  1. 先执行内层的printf("Lucknow")
    C语言规定,函数的参数会在函数本身执行前完成计算。所以外层printf还没开始打印,内层的printf先跑起来:

    • 它会在屏幕上打印字符串Lucknow,这个字符串一共7个字符(L-u-c-k-n-o-w)。
    • 根据printf的规则,它会返回成功打印的字符总数,所以这个内层printf的返回值是7。
  2. 再执行外层的printf,并赋值给a
    外层printf拿到内层返回的7,把格式串里的%d替换成7,然后打印made,7,easy。咱们数一下这个字符串的字符数:
    m、a、d、e、,、7、,、e、a、s、y——刚好11个字符。
    所以外层printf的返回值是11,这个值被赋值给了变量a。

  3. 最后打印a的值
    最后的printf("%d",a)会把a的11打印出来。

你之前误以为a是两次打印的字符总和(7+11=18),但实际上a只接收了外层printf的返回结果——内层printf的返回值只是作为参数传递给外层,并没有被a保存下来哦。

内容的提问来源于stack exchange,提问作者Radha Gogia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:03:02