arrays - 为什么输出不对?
问题描述
union test
{
int x;
char arr[4];
int y;
};
#include<stdio.h>
int main()
{
union test t;
t.x = 0;
t.arr[1] = 'G';
printf("%s", t.arr);
return 0;
}
预测上述程序的输出。假设一个整数的大小是 4 个字节,一个字符的大小是 1 个字节。
为什么答案不应该是垃圾字符后跟“G”,然后是更多垃圾字符?
解决方案
假设这里有 4 字节整数:
t.x = 0;
将四个 0 字节写入联合。这会覆盖 arr[] 中的所有元素。
t.arr[1] = 'G';
将“G”写入联合的第二个字节。仍然有 3 个零字节:一个在 G 之前,两个在 G 之后。
printf("%s", t.arr);
最多打印 t.arr 中的第一个 0 字节,这是 t.arr 中的第一个字节,因为您在联合中写入了 4 个零。没有输出。
推荐阅读
- android - Android 创建自定义键盘
- c# - 运行 UWP 应用程序(C#)时没有显示 StackPanel
- wordpress - 在由 wordpress 进行身份验证之前,首先验证 wordpress 登录凭据到 api
- android - 谷歌地图中绘制多边形线的密钥生成错误
- laravel - 在 Laravel 中使用 FormRequest 自定义 PUT 路由
- c# - C#监控可执行文件的启动并在用户使用它之前执行操作
- sql-server - 如果我想审计我的表,这是一个合适的数据库设计吗?
- c# - 字典默认值作为参数
- swift - UIKit.NSUnderlineStyle single 或 styleSingle
- angular - 用于附加属性的 Typescript 装饰器或继承