猪猪虾 发表于 2021-1-15 18:51:49

给结构体字符串赋值,之前也是这么做的,这次怎么报错了

#include<winuser.inl>
#include<stdio.h>
#include <cstdlib>
#include<string.h>

union Test
{
        int i;
        double pi;
        char *str;
};

int main()
{
        union Test test;
        test.i = 520;
        test.pi = 3.14;
        test.str = "fishc";

        printf("address of test.i: %p\n", &test.i);
        printf("address of test.pi: %p\n", &test.pi);
        printf("address of test.str: %p\d",&test.i);
        return 0;
}

xieglt 发表于 2021-1-15 18:57:05

1、union 不是结构体,结构体是struct ,union 中文叫联合。
2、 printf("address of test.str: %p\d",&test.i);   \d 不是转义符。

猪猪虾 发表于 2021-1-15 19:00:54

xieglt 发表于 2021-1-15 18:57
1、union 不是结构体,结构体是struct ,union 中文叫联合。
2、 printf("address of test.str: %p\d",&tes ...

不是这个地方的问题,我改过了

jackz007 发表于 2021-1-15 19:08:36

本帖最后由 jackz007 于 2021-1-15 19:54 编辑

      即便是结构体,也只是支持定义时初始化,不可以在运行时整体赋值,主要是不可以通过等号为字符串成员赋值。
      联合是多个成员共用同一块内存,通常是为其中的某一个成员赋值,其它成员自动就会获得赋值,没有必要对所有成员一一赋值,每次新的赋值都是对前面赋值的否定和覆盖。
      楼主可以试一下这个代码:
#include <stdio.h>

union Test {
      int i   ;
      char c ;
}               ;

int main(void)
{
      union Test test = {0x44434241}                     ;// 初始化的是整个联合体,而不是哪一个成员
      int i                                                ;
      printf("%x\n" , test . i)                            ;// 按十六进制整型数显示 test . i
      for(i = 0 ; i < 4 ; i ++) printf("%c" , test . c) ;// 按字符显示 test . c
      printf("\n")                                       ;
}
页: [1]
查看完整版本: 给结构体字符串赋值,之前也是这么做的,这次怎么报错了