memcmp比较两个struct是否相等

struct MyStruct
{
	char a;
	int b;
};
MyStruct A, B;
memcmp(&A, &B, sizeof(MyStruct));

A和B是否可以通过memcmp来判断是否相等。我一直以为虽然要内存对齐,但是a后面会补三个’\0’所以还是可以判断是否相等的。真是迷之自信!这个问题其实最主要是考察你要知道内存对齐,MyStruct的实际大小是8就够了。然后未初始化的全局变量,static变量,编译器会自动初始化为0。但是局部变量的值是不确定的,必须先赋值再使用。虽然全局变量,static变量可以不初始化,但是建议还是保持好习惯,所有的变量都要先初始化再使用!所以,这里char a后面3个字节不知道原本内存中是什么数据,那么A和B是没法进行比较是否相等的!我们不妨gdb调试看看内存中的情况:

MyStruct A;
A.a = 'a';
A.b = 10;

这里写图片描述
这里看到,在’a’后面3个字节分别是’\344’ ‘\377’ ‘\377’,后面补齐的内容不确定,那么就造成了memcmp不能判断是否相等。
用gdb查看内存
格式:x /nfu
说明:
x 是 examine 的缩写
n 表示要显示多少个内存单元
f 表示内存单元显示方式,可取如下值:
x 按十六进制格式显示变量
d 按十进制格式显示变量
u 按十进制格式显示无符号整型
o 按八进制格式显示变量
t 按二进制格式显示变量
a 按十六进制格式显示变量
i 指令地址格式
c 按字符格式显示变量
f 按浮点数格式显示变量
u表示一个内存单元的长度
b 表示单字节
h 表示双字节
w 表示四字节
g 表示八字节

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值