【发布时间】:2014-06-30 08:44:41
【问题描述】:
我刚刚调试了一个令人难以置信的严重错误:在我自己的 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
}
}
}
现在,在我的 PC 上,memcmp 已返回 -1、0 和 1,在另一个上它返回 -5、0 和 5。通过将此与 direction 进行比较,我导致排序完全错误。
但是我想知道,memcmp的返回值的绝对值(也就是大小)究竟是什么意思?
返回一个整数值,表示两者之间的关系 内存块的内容:零值表示内容 两个内存块的大小相等。 大于零的值表示 两个内存块中不匹配的第一个字节具有 ptr1 中的值大于 ptr2 中的值,就好像评估为 unsigned char 价值观;而值小于零则相反。
没有提及大小,他们只是通过说大于零来确保+-1不会出错。
【问题讨论】: