在C中printf()的意外行为

时间:2014-01-16 12:01:15

标签: c printf

#include <stdio.h>

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

代码打印printf中用引号括起来的字母表,而不管变量a的值和类型如何。如果添加任何其他数字,除了1没有打印。 为什么会这样?

4 个答案:

答案 0 :(得分:5)

不确定,我当然希望它只打印d。那是我测试时发生的事情。

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

答案 1 :(得分:3)

在编译上面的代码时,您应该收到如下警告:

[Warning] too many arguments for format [-Wformat-extra-args]  

现在删除printf的参数a

 printf("%d" + 1);  

这将打印d

100  101
%    d
^
|
Here is the starting address of the string.  

%d是一个字符串,起始地址为100. "%d" + 1会为您提供地址101

答案 2 :(得分:1)

你为什么要这样做? 如果你想要你可以做到 喜欢

          printf("%d", a+1);

答案 3 :(得分:1)

试试这个,你会明白放松是什么让你理解

#include <stdio.h>

int main()
{
    short int a = 5,b = 4;
    printf("%d %d" + 4, a,b);
    return 0;
}

输出:d

因为它在printf()语句中使用双引号内的第4个字符..

如果数字为3

输出:5

如果数字是2

输出:5

如果数字是1

输出:d