面试的时候,考官问了RT的题目,觉得这题问得比较有水平,所以把它写出来分享。
大家知道,结构体里面的变量,如果有的是char型,有的是int型,有的是long型,有的是short型,也有的是未分配的地址等等。
想看如下代码:
#include
#include
#include
typedef struct{
char a;
int b;
}test_struct_t;
int
main(int argc, char *argv[])
{
test_struct_t A,B;
A.a = 0;
A.b = 0;test_struct_t B;
memset(&B,'\0',sizeof(B));
if( 0 == memcpy(&A,&B,sizeof(A))){
printf("struct A is euqal struct B");
} else{
printf("struct A is uneuqal with struct B");
}
return 0;
}
有开发经验的,马上就能说出truct A is uneuqal with struct B,原因就是结构体的字节问题。
A 只对char a清零,根据自然对齐原则,但是后面三个字节的内容是随机任意的。而B,是对整个内存区域都清零了,所以两者大部分情况下都不会相等的,
所以,得出结论,结构体不能用memcpy函数比较!