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。