скопировать целое число в буфер, если в буфере достаточно места в C

#c #copy #integer #buffer

#c #Копировать #целое #буфер

Вопрос:

У меня есть функция для копирования целого числа в буфер, если в буфере достаточно места

 void copy_int(int val, void *buf, int maxbytes)
{
    if (maxbytes-sizeof(val) >= 0)
        mempcy(buf, (void *) amp;val, sizeof(val));
}
  

Проблема в том, что оно всегда копирует значение в буфер, даже когда maxbytes слишком мал.
Интересно, почему это так?

Комментарии:

1. Включите предупреждения вашего компилятора и учитывайте их

Ответ №1:

sizeof(val) является значением без знака. int unsigned выдает значение без знака.

Используйте: if (maxbytes >= sizeof(val))

Ответ №2:

sizeof(val) имеет тип size_t , который не имеет знака. Следовательно, maxbytes-sizeof(val) также будет беззнаковым и, следовательно, всегда будет >= 0 .

Вы должны попробовать maxbytes-(int)sizeof(val) .