union 的小疑点(,有关问题解决即结贴)
union 的小问题(在线等,问题解决即结贴)
比如我定义了一个结构体:
然后有个人在某个黑暗的角落偷偷的定义了一个变量并赋值,我负责把它存到 MSSQL 里面去,于是在MSSQL 数据库里面,建了一个表 dev,这个表的第一个字段类型当然是 INT ,第二个我弄的是 varchar(128),问题来了,我并不知道这个变量被赋值的时候第一个成员是啥类型的,那我怎么存呢?
------解决方案--------------------
全部存为varchar类型。
使用sprintf函数将
double转为char
long也转为char
------解决方案--------------------
可是我并不知道需不需要转,也不知道该怎么转,我只是直接使用联合体的字符串去存。
------解决方案--------------------
typedef struct Dev
{
int ID;
int Type;
union UVAL
{
char s[128];
double d;
long l;
}uVal;
}DevInfo;
Type记录当前枚举的类型
或者 在你这个情况中,不需要使用枚举,都使用 char s[128]; 表示就够了
------解决方案--------------------
给这个变量赋值的地方通知你,不过既然是黑暗的角落里,那通知也不会有
以上3种方法,没了
设计缺陷,无解
比如我定义了一个结构体:
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
------解决方案--------------------
可是我并不知道需不需要转,也不知道该怎么转,我只是直接使用联合体的字符串去存。
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种方法,没了
设计缺陷,无解