在阅读中:如何在不使用计数器的情况下检查数组的元素是否都相同?, @Skizz 使用了漂亮的解决方案:
memcmp (&string [0], &string [1], sizeof string [0] * (N - 1))
所以如果 N 恰好是 1,我们得到
memcmp (&string [0], &string [1], 0)
当比较长度为0时,返回值一定是0吗?
测试用例(Cygwin gcc 版本 4.8.1 windows 64 位)返回0
. 所以我知道在这个和其他一些编译器/平台上它是 0。
printf("%d\n", memcmp("foo", "bar", 0));
C11 草案规范紧随其后,但在这个问题上似乎很安静。也许规范的另一部分或某事说明了什么?
7.24.4.1 memcmp 函数
概要
#include <string.h>
int memcmp(const void *s1, const void *s2, size_t n);
说明
memcmp 函数将 s1 指向的对象的前 n 个字符与 s2 指向的对象的前 n 个字符进行比较。
返回
memcmp 函数返回一个大于、等于或小于零的整数,相应地,因为 s1 指向的对象大于、等于或小于 s2 指向的对象。
(假设 &string [1] 没有引用非法内存)