为什么输出不对?

Why isn't the output right?

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 个零。无输出。