![](/img/trans.png)
[英]Passing too few arguments to printf for the format specifier — is it undefined behavior?
[英]Why does printf with too few arguments work on Cygwin?
int main()
int a = 1 , b=2 ,c=3 ,d=4 ;
a= ++b;
c= d++;
print f("a = %d , b = %d , c = %d, d= %d" , a , b ,c);
return 0;}
a=3 b=3 c=4 d=5
我不知道为什么这段代码在 cygwin 中正常工作,因为我不在 printf 中写 D
您通过使用太少的参数调用printf
来依赖未定义的行为。 你永远不应该这样做,因为程序可能会崩溃,如果它确实运行了,结果将基于特定的编译器/系统随机。
这里发生的事情是printf
从堆栈中弹出的变量比它预期的要多,并且正在从main
从堆栈中抓取一些东西。 这几乎总是会在您的程序稍后导致某种堆栈/内存损坏。 当然,您的代码很短,因此在这种简单的情况下不会发生这种情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.