命令printf的一个奇怪的问题

Ric*_*eek 1 c c++

我正在使用Simple Scalar工具集来运行缓存关联性的一些模拟.我看到printf函数有一些奇怪的行为.这是代码片段:

printf(" Name: %s %d %d %d \n", name, nsets, cp->set_shift, cp->set_mask);
printf(" Name: %s %d %d %d \n", name, cp->set_mask, nsets, cp->set_shift);
Run Code Online (Sandbox Code Playgroud)

printf行是一个接一个,其间没有其他代码.这是输出:

 Name: dl1 128 5 127
 Name: dl1 127 0 128
Run Code Online (Sandbox Code Playgroud)

第二个printf的输出是错误的.第二个printf的输出应该是:

Name: dl1 127 128 5
Run Code Online (Sandbox Code Playgroud)

更改printf语句的相对顺序不会更改输出.我缺少什么部分的printf才能理解?

关于新手

And*_*rus 7

去看看变量声明.我的猜测是有人是shortlong不是int.由于printf无法检查您传递的有效性,因此它根据%符号决定从堆栈中抓取多少个咬合.如果你的args不同意格式,不是编译错误,但垃圾可以出来.