typecasting与memcpy():哪一个更好

typecasting vs memcpy() : which one is better?

本文关键字:哪一个 更好 memcpy typecasting      更新时间:2023-10-16

假设我有两个变量,如下所示:

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 

现在,我想通过在上面写my_msg的内容来擦除dummy的内容。那么下面哪种方法更好呢?

memcpy(&dummy, my_msg, size);

&dummy = (my_struct *) my_msg;

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

两者都不是,您可以使用xdr来序列化&未序列化或类似的

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

还有一件事就是用这个来教育自己在C结构中查找由于对齐引起的漏洞

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结构传递信息。我可以通过这种方式恢复信息