我只是碰巧调试了一个令人难以置信的讨厌的错误:在我自己的 PC(Windows 7 x64,MinGw)上,我的 C 程序将使用memcmp
比较数组成员时成功地对数组进行排序。
我的函数使用了冒泡排序算法,它的骨架如下所示:
void array_sort(ArrayMap *array, char direction) {
make sure direction is +1 or -1 only
define some variables
for(...) {
for(...) {
cmpres = memcmp(elm1, elm2, sizeOfElement);
if (cmpres!=0&&cmpres!=direction)
{
SWAP here
}
}
}
现在,在我的电脑上,memcmp
已返回-1
,0
而1
在另一台电脑上又返回-5
,0
并且5
. 通过将此与direction
我进行比较,导致排序完全错误。
但是我想知道,返回值的绝对值(即大小)memcmp
实际上是什么意思?
返回一个整数值,表示内存块的内容之间的关系:零值表示两个内存块的内容相等。大于零的值表示两个内存块中不匹配的第一个字节在 ptr1 中的值大于在 ptr2 中的值,就像评估为 unsigned char 值一样;小于零的值表示相反。
没有提到大小,他们只是通过说大于零来确保 +-1 不会出错。