printf("%2$*11$s",…)这个队形是什么意思

它在 c11/c++ 中使用吗?:

printf("%2$*11$s",...)

它来自一个 elf 文件,这个文件使用 printf() 来操作,就像mem[4]=mem[2]+mem[1]. 你可以参考这个https://ctftime.org/task/5042(这是一个反向 CTF 问题)。

就我而言,我知道 $ 用于指定哪个 var 的位置,但没有引用通知一个块可以有两个 $。

另外,除了位置之外,我在格式中找不到任何关于 $ 的函数。

所以,如果有人能告诉我这是有意义的,我将不胜感激。

回答

n$是 POSIX 中定义的扩展,用于选择要打印的参数。这称为参数字段

printf 格式字符串 - 维基百科

实际上,这个问题是关于使用二合一n$格式说明符的。让我用小例子来检验......

#include <stdio.h>

int main(void) {
    printf("%1$*3$sn", "a", "b", 10, 20);
    printf("%1$*4$sn", "a", "b", 10, 20);
    printf("%2$*3$sn", "a", "b", 10, 20);
    printf("%2$*4$sn", "a", "b", 10, 20);
    return 0;
}

输出:

         a
                   a
         b
                   b

看起来%n$*m$s意味着“n使用 -th 参数指定的宽度打印m-th 参数”。最后s的意思是sin %s


以上是printf("%2$*11$s",…)这个队形是什么意思的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>