-3

假设我有两个变量如下:

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;
4

3 回答 3

6

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

于 2013-07-20T10:43:55.123 回答
1

也不是,您可以使用 xdr 来序列化和反序列化或类似的东西

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

还有一件事也用这个来教育自己 在 C 结构中查找由于对齐而出现的漏洞

于 2013-07-20T10:53:42.683 回答
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 结构传递信息。我可以通过这种方式恢复信息

于 2013-07-20T12:59:00.153 回答