面试题:两个相同struct变量能否用memcmp比较?

2014-11-23 23:22:24 · 作者: · 浏览: 0

面试的时候,考官问了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函数比较!