在C中printf()的意外行为

use*_*188 -3 c printf

#include <stdio.h>

int main()
{
    short int a = 5;
    printf("%d" + 1, a);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

printf无论变量的值和类型如何,代码都会打印括在引号中的字母a.如果添加任何其他数字,除了1没有打印.为什么会这样?

unw*_*ind 5

当然,不确定,我希望它能打印出来d.这就是我测试时发生的事情.

如果添加超过1(或2)的所有投注都已关闭,并且您将获得未定义的行为以传递随机指针而不是有效的格式化字符串.

  • @ user3202188因为你传递的格式字符串在字符串"%d"的开头之外开始一个字符,即字符串""d"`.基本指针算术. (5认同)