据我所知,如果printf没有参数,它会输出一个意外的值.
例:
#include <stdio.h>
int main() {
int test = 4 * 4
printf("The answer is: %d\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这将返回一个随机数.在使用不同格式(如%p,%x等)后,它不会打印16(因为我没有将变量添加到参数部分)我想知道的是,这些值在哪里被采用从?它是堆栈的顶部吗?每次编译时都不是新值,这很奇怪,就像一个固定的值.
printf("The answer is: %d\n");
Run Code Online (Sandbox Code Playgroud)
调用未定义的行为.C要求转换说明符具有关联的参数.虽然它是未定义的行为并且任何事情都可能发生,但在大多数系统上,您最终都会转储堆栈.这是格式字符串攻击中使用的一种技巧.