忽略直接参数访问

时间:2015-02-23 00:53:52

标签: c printf

所以我的代码行如下

printf("test @ 0x%1$08x = %2$d 0x%2$08x\n", &test_val, test_val);

但不是打印变量而是打印

test @ 0x$08x = $d 0x$08x

它完全忽略百分比字符而不打印任何变量。我找不到任何关于这个或任何可能发生这种情况的理由,希望有人可以提供帮助。

  编辑:我找不到链接,但基本上是从我的知识和来自   Hacking: The art of Exploitation百分号之后的数字应该是它使用的参数,因此%n $ d将使用第n个   参数和打印为小数。在这种情况下,将打印%1 $ 08x   & test_val以十六进制和%2 $ d将test_val打印为小数。

1 个答案:

答案 0 :(得分:-1)

int c = 0;
int * p = &c;

printf("test@ 0x%d  %d\n", &p, *p);

http://www.cplusplus.com/reference/cstdio/printf/ 看看这个页面,了解哪些修改器将具有哪种课程。

  

(数字)要打印的最小字符数。如果要打印的值小于此数字,则结果将填充空格。即使结果较大,也不会截断该值。