为什么输出不对?
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 个零。无输出。
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 个零。无输出。