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

来源:互联网 发布:android完整项目源码 编辑:程序博客网 时间:2024/05/23 20:49

面试的时候,考官问了RT的题目,觉得这题问得比较有水平,所以把它写出来分享。

大家知道,结构体里面的变量,如果有的是char型,有的是int型,有的是long型,有的是short型,也有的是未分配的地址等等。


想看如下代码:

#include <stdlib.h>
#include <stdio.h>

#include <string.h>


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函数比较!

0 0
原创粉丝点击