【发布时间】:2017-09-15 13:57:29
【问题描述】:
我当前的代码:
#include <stdio.h>
#include <string.h>
/*
struct Value {
int typ;
unsigned char vstring;
int vint;
float vfloat;
};
*/
struct Value {
int typ;
/*
type=1 ==> get vstring
type=2 ==> get int
type=3 ==> get float
*/
union{
struct{
unsigned char *vstring;
};
struct{
int vint;
};
struct{
float vfloat;
};
}
};
void clear(Value vall){
if(vall.typ == 1){
delete(vall.vstring);
}else if(vall.typ == 2){
delete(vall.vint);
}else{
delete(vall.vfloat);
}
}
int main()
{
struct Value v;
/////////////////////////////////////////////
v.typ=1;
strcpy( v.vstring,"C Programming/may this a very big utf-8 string!");
/*
strcpy( v.vint,4);
strcpy( v.vfloat,4.5);
*/
/////////////////////////////////////////////
printf( "ValueType : %d\n", v.typ);
printf( "ValueString : %s\n", v.vstring);
printf( "ValueInt : %d\n", v.vint);
printf( "ValueFloat : %f\n", v.vfloat);
return 0;
Value copy=v;
clear(copy);
copy.typ=2;
copy.vint=5;
}
但这有错误,我不知道如何解决这个问题。
这有一个Value 结构。在这个有 (vstring,vint,vfloat) 和typ 中的值存储类型以加快速度。
请帮我修复此代码。
我希望将此结构存储在数组/映射/哈希映射中...... 坦克你。
【问题讨论】:
-
unsigned char vstring应该是unsigned char *vstring,你需要先分配内存来复制字符串。 -
如果一次只能是一种类型,您可以使用
union。 -
改了,但也再次出现错误。
-
什么是
delete()???以及如何“删除” int 或 float? -
delete() 表示清除并从内存中删除,我认为可以使用
memset(<variable_name>, 0, MEMORY_BLOCK);是吗?或#define CLEAR(x) memset(x,'\0',1000); CLEAR(<variable_name>);?