首页 > 解决方案 > 为什么输出不对?

问题描述

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”,然后是更多垃圾字符?

标签: arrayscstructure

解决方案


假设这里有 4 字节整数:

t.x = 0;

将四个 0 字节写入联合。这会覆盖 arr[] 中的所有元素。

t.arr[1] = 'G';

将“G”写入联合的第二个字节。仍然有 3 个零字节:一个在 G 之前,两个在 G 之后。

printf("%s", t.arr);

最多打印 t.arr 中的第一个 0 字节,这是 t.arr 中的第一个字节,因为您在联合中写入了 4 个零。没有输出。


推荐阅读