c++ - 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 中定义的扩展,用于选择要打印的参数。这称为参数字段。
实际上,这个问题是关于使用二合一n$
格式说明符。让我用一些小例子来研究......
#include <stdio.h>
int main(void) {
printf("%1$*3$s\n", "a", "b", 10, 20);
printf("%1$*4$s\n", "a", "b", 10, 20);
printf("%2$*3$s\n", "a", "b", 10, 20);
printf("%2$*4$s\n", "a", "b", 10, 20);
return 0;
}
输出:
a
a
b
b
它看起来意味着“使用 -th 参数指定的宽度%n$*m$s
打印-th 参数”。最后的意思是in 。n
m
s
s
%s
推荐阅读
- javascript - 会议开始/结束时区间歇性地修改为 UTC
- reactjs - Eslint 反应钩子/详尽的 derps 递归
- sql - 如何根据配方中使用的多种成分更新我的库存表
- javascript - Angular 基于事件驱动或数据驱动模型
- kubernetes - Kubernetes - 无法在 minikube 上运行 echoserver
- c# - 有什么方法可以关联两种类型以允许泛型方法根据输入参数的类型返回相关类型
- ios - 在大多数 iOS 设备上运行 Flutter 应用程序时出现问题
- camunda - 如何在camunda中跳过并行分支
- reactjs - 如何检测浏览器选项卡切换时的反应状态变化?
- r - 如何在 R 中绘制重叠时间序列