#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)
.