不带参数解释的 Printf

2023-11-22

我知道如果 printf 没有给出任何参数,它会输出一个意外的值。

Example:

#include <stdio.h>

int main() {
    int test = 4 * 4

    printf("The answer is: %d\n");
    return 0;
}

这将返回一个随机数。在尝试了不同的格式(例如 %p、%x 等)之后,它不会打印 16(因为我没有将变量添加到参数部分)我想知道的是,这些值在哪里获取从?它是堆栈的顶部吗?它并不是每次编译时都会产生一个新值,这很奇怪,它就像一个固定值。


printf("The answer is: %d\n");

调用未定义的行为。 C 要求转换说明符具有关联的参数。虽然这是未定义的行为并且任何事情都可能发生,但在大多数系统上您最终都会转储堆栈。这是使用的一种技巧格式化字符串攻击.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不带参数解释的 Printf 的相关文章

随机推荐