我试图在我的Dev C ++ IDE上运行基本代码,但它提供了预期的输出 -
printf("%d", printf("stackoverflow1"));
printf("%d", puts("stackoverflow2"));
puts(printf("stackoverflow3"));
预期输出应为:
stackoverflow114stackoverflow2
14stackoverflow314
但我得到的输出是:
stackoverflow114stackoverflow2
0stackoverflow3
有人可以解释输出中的不一致吗?我知道puts
会返回一个非负数,但为什么我会得到一个' 0'每次。同样在最后一个声明中,为什么不打印printf
打印的字符数?
答案 0 :(得分:3)
答案 1 :(得分:2)
答案 2 :(得分:-1)
printf("%d", printf("stackoverflow1"));
Printf返回一个int(打印多少个字符= 14)。因为外部printf的参数必须在评估外部参数之前进行评估,所以打印的字符串将为“stackoverflow114”
printf("%d", puts("stackoverflow2"));
put返回一个“非负值”(这是标准给你的唯一保证)。在您的情况下,非负值为int 14.字符串“stackoverflow2 \ n”由puts
打印,14由printf
打印。
puts(printf("stackoverflow3"));
puts
将const char*
作为参数,printf
返回打印的字符数(再次为14)。由于puts
接受一个指针,它可以将地址14处的内存解释为字符串并输出它(它也可能取消编译 - 大多数编译器都会'高兴'并为你投这个,并附上警告) 。这个字符串似乎是空的(这可能是随机的)。因此,此行仅打印“stackoverflow3”(在您的情况下),外部仅打印一个随机字符串(在您的情况下为“”)。