类型转换与memcpy():哪个更好?

时间:2013-07-20 10:39:03

标签: c++ c linux pointers

假设我有两个变量如下:

typedef struct{
   int proc;
   int id;
   int value;
   int last;
} my_struct;

struct my_struct dummy;
int len = 3*sizeof(int);
char my_msg[len];

//Some assignments are done here on those variables 

现在,我想通过在dummy上写my_msg的内容来删除memcpy(&dummy, my_msg, size); 的内容。那么下面哪一个是更好的方法呢?

&dummy = (my_struct *) my_msg;

{{1}}

3 个答案:

答案 0 :(得分:6)

除了你的语法有点错误之外,你的类型转换具有未定义的行为,因为你的结构可能由于填充而具有不同的大小,并且具有特定的对齐属性。不要这样做。

答案 1 :(得分:1)

都不是, 你可以使用xdr来序列化&反序列化或类似的东西

可能的xdr库 http://xstream.sourceforge.net/

还有一件事要教育自己 Find holes in C structs due to alignment

答案 2 :(得分:0)

typedef struct{
   int proc;
   int id;
   int value;
   int last;
} my_struct;

my_struct dummy;

void main(){

    char my_msg[ sizeof(my_struct) ];
    memcpy(&dummy, &my_msg, sizeof(my_struct) );
}

当我开发网络程序时,我通过C结构传输信息。我可以通过这种方式恢复信息