union 的小疑点(,有关问题解决即结贴)

union 的小问题(在线等,问题解决即结贴)
比如我定义了一个结构体:


typedef struct Dev
{
     int  ID;
     union  UVAL
     {
            char s[128];
            double d;
            long   l;
     }uVal;
}DevInfo;

然后有个人在某个黑暗的角落偷偷的定义了一个变量并赋值,我负责把它存到 MSSQL 里面去,于是在MSSQL 数据库里面,建了一个表 dev,这个表的第一个字段类型当然是 INT ,第二个我弄的是 varchar(128),问题来了,我并不知道这个变量被赋值的时候第一个成员是啥类型的,那我怎么存呢?

------解决方案--------------------
全部存为varchar类型。

使用sprintf函数将
double转为char
long也转为char
------解决方案--------------------
引用:
全部存为varchar类型。

使用sprintf函数将
double转为char
long也转为char

可是我并不知道需不需要转,也不知道该怎么转,我只是直接使用联合体的字符串去存。

DevInfo di;  
di.uVal.s ...// 我直接使用的是 s 字段,但是不知道啥时候该转,也不知道该怎么转。

------解决方案--------------------
typedef struct Dev
{
     int  ID;
     int  Type;
     union  UVAL
     {
            char s[128];
            double d;
            long   l;
     }uVal;
}DevInfo;

Type记录当前枚举的类型

或者 在你这个情况中,不需要使用枚举,都使用 char s[128]; 表示就够了
------解决方案--------------------
给这个变量赋值的地方通知你,不过既然是黑暗的角落里,那通知也不会有

以上3种方法,没了

设计缺陷,无解