c - 为什么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;
}
解决方案
您的代码表现出未定义的行为。它没有定义应该发生什么,并且允许编译器做它想做的事情。
为什么我们从整数 int1 的值中得到“d”?
很可能你int
有 4 个字节,你的架构是小端的。100
是0x64
,所以它被存储为 4 个字节0x64, 0x00, 0x00, 0x00
。您的系统很可能使用 ASCII 并且100
(或0x64
)是 的 ascii 值d
,并且第二个字节很可能被解释为零终止字符。
推荐阅读
- javascript - Exporting Mongoose methods in Node.js (TypeError: Cannot read property 'name' of null)
- azure - 安装在本地计算机上的 Azure VM 代理是否将数据发布到 Azure/与 azure 相关的任何服务/任何其他 URL?
- cordova - Ionic Cordova 平台添加 ios 失败,未加载库:/usr/local/opt/openssl/lib/libssl.1.0.0.dylib (LoadError)
- excel - 无法更改字体颜色
- wcf - 添加的服务引用的自动生成代码中的循环基类依赖错误
- c++ - 如何设置永久背景颜色?
- javascript - 为什么 xaxis 和 yaxis 刻度不出现在 D3 的轴上?
- django - Get Data from Multiple ForeignKey Query Results
- python - 通用数学方程
- c++ - 使用文件中的数字作为输入来计算它们 c++