2012-06-14 3 views
0

У меня есть небольшая проблема с использованием memcmp. У меня есть два массива (длина = 3 байт) с точно такими же данными.Ошибка C++ memcmp с неподписанным массивом символов?

Если я попытаюсь сравнить их с memcmp, это не удастся ?!

if (memcmp(ucbuffer, ucnewbuffer, buffer.sDeviceData.sLenght)) { 
    cout << "val written, val ok!\n"; 
}; 

ucbuffer, ucnewbuffer оба неподписанные символ * и были выделены с помощью

calloc(buffer.sDeviceData.sLenght, sizeof(unsigned char); 

Если я сравнить оба массива вручную, и это приведет к быть точно так же.

У вас есть идея?

Проведите приятный вечер.

+1

Опубликовать весь код, а не только фрагменты. – dcp

ответ

9

Эта функция возвращает ноль (т. Е. Не соответствует истине), когда буферы сравниваются равными.

+0

Я думал, что true = 0, false -1, поэтому проверка на 0 означает true ?! Hm ... если вы правы, чем остальная часть моего кода не работает либо ... – AllDayPiano

+0

проверка на 0 в этом случае означает, что сравнение равно, 0 традиционно ложно, хотя –

+0

* Any * C или C++ ссылка должна сказать вам, что false равен нулю, а true - один (плюс все другие ненулевые значения). Обычно функции возвращают ноль на * success *, и в этом случае ненулевой результат иногда указывает код ошибки. Возможно, вы думали об этом и смутили его в этой ситуации. Но «memcpy» не имеет результата отказа. Даже если буферы не равны, функция все еще * успешно * сообщает вам результат. Если это поможет вам вспомнить, 'memcpy' возвращается так же, как' strcpy'; знак результата сообщает вам, какой аргумент следует сортировать впереди другого. –

Смежные вопросы