скопировать целое число в буфер, если в буфере достаточно места в C - PullRequest
1 голос
/ 07 апреля 2011

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

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

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

Ответы [ 2 ]

9 голосов
/ 07 апреля 2011

sizeof(val) - это значение без знака.int - unsigned создает значение без знака.

Использование: if (maxbytes >= sizeof(val))

3 голосов
/ 07 апреля 2011

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

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

...