为什么if(工会会员)评估为True?

时间:2018-07-23 15:03:13

标签: c unions

 union Data {
   int i;
   char s[20];
   } data;

int main(){
   printf( "%lu\n", sizeof( data ) );
   for( int i = 0; i < 20; ++i ) {
     data.s[i] = 0;
   }
   data.i = 0;
   strcpy( data.s, "Hello World!");
   if( data.i ) {
       strcpy( data.s, "Farewell!");
   }
   printf( "%s\n", data.s ); 

为什么它以“告别”作为响应?我希望if( data.i )的评估结果为False,但以某种方式将其评估为True

1 个答案:

答案 0 :(得分:6)

struct不同,union中的所有字段在内存中彼此重叠。因此,如果您更改一个字段,它将影响所有其他字段。

如果您希望这些字段彼此不同,请声明struct

struct Data {
   int i;
   char s[20];
} data;