在我的代码中我使用以太网MAC地址,需要比较00:00:00:00:00:00地址;我想出的最简单的解决方案是:
#define ETH_ADDR_LEN 6
unsigned char mac[ETH_ADDR_LEN] = { 0x1, 0x2, 0x3, 0x4, 0x5, 0x6 }; /* example */
const unsigned char empty[ETH_ADDR_LEN] = { 0, };
if (memcmp(mac, empty, ETH_ADDR_LEN) == 0) {
....
}
有没有更简洁的方法来实现我的目标? 简单的memcmp(mac,“”,6)将不起作用 - 我可以知道为什么吗?
提前致谢!
答案 0 :(得分:2)
memcmp(mac, "", 6)
不起作用,因为空字符串由单个NUL字符组成。比较6个字节将比较您的MAC地址与NUL以及其后的5个字节的潜在垃圾。
但是,您可以使用以下方法强制您的字符串包含六个NUL字符。请注意,它只需要5个显式NUL,因为该字符串有一个额外的尾随NUL:
if(memcmp(mac, "\0\0\0\0\0", 6) == 0) {
...
}
答案 1 :(得分:2)
您的代码没有任何问题。保持原样。 “空”数组包含6个零,因此它可以正常工作。
答案 2 :(得分:1)
memcmp(mac, "", 6)
不起作用,因为""
是一个1个字符的数组,其值为零(并且衰减到指向其单个元素的指针)。
访问数组外部的元素会调用Undefined Behavior。