首页 > 解决方案 > 为什么printf继续读取并显示下一个整数变量的值时会得到这个值

问题描述

我不确定我是否在问一个愚蠢的问题。

我们知道 Printf 函数会打印连续的字符块,直到找到一个空字符。由于数组 b 不包含空字符并且第二个 printf 命令中的格式说明符是 %s,因此它打印 '<strong>xyzx' 而不是 '<strong>xyz'。(我理解)这是因为输出包含 a 的值,即 x。

但是,当我用值“<strong>xy”初始化数组 a 时,第一个和第二个 printf 命令的输出分别变为“xy d ”和“xyzxy d ”。我的问题是为什么我们从整数 int1 的值中得到 '<strong>d'?

int main(void) 
{
int int1 = 100;

char a[2] = "x"; 
char b[3] = "xyz";
printf("1.: %s\n", a);
printf("2.: %s\n", b);
  return 0;
}

标签: cprintf

解决方案


您的代码表现出未定义的行为。它没有定义应该发生什么,并且允许编译器做它想做的事情。

为什么我们从整数 int1 的值中得到“d”?

很可能你int有 4 个字节,你的架构是小端的。1000x64,所以它被存储为 4 个字节0x64, 0x00, 0x00, 0x00。您的系统很可能使用 ASCII 并且100(或0x64)是 的 ascii 值d,并且第二个字节很可能被解释为零终止字符。


推荐阅读