与6字节长的零字符串进行比较

时间:2011-05-04 14:00:02

标签: c string

在我的代码中我使用以太网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)将不起作用 - 我可以知道为什么吗?

提前致谢!

3 个答案:

答案 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。