В C, как memcpy работает со целочисленным аргументом со знаком? - PullRequest
0 голосов
/ 24 июня 2010

В C, что произойдет, если я поставлю целое со знаком, особенно отрицательное целое число в качестве 3-го аргумента функции memcpy?

Пример:

 memcpy(destBuf, source, -100*sizeof(source))

Будет ли результат -100*sizeof(source) быть интерпретирован memcpy как неподписанный?

Спасибо!

Ответы [ 2 ]

7 голосов
/ 24 июня 2010

последний параметр без знака.поэтому, выполнив -100 * sizeof (источник), вы получите огромное число (которое будет округлено, т. е. переполнено).

Это эквивалентно выполнению "4 294 967 196 * sizeof (источник)".

Редактировать: На самом деле это неправильно, я только что понял.Он будет делать -100 * sizeof (source) и затем конвертировать его в неподписанный.Например, если sizeof (source) равен 4, он преобразует -400 в unsigned и даст вам 0xFFFFFE70 (4,294,966,896).

2 голосов
/ 24 июня 2010

Нет, вы скопируете большой объем данных, поскольку -100, рассматриваемое как число без знака, является огромным числом без знака, что-то вроде FFFFFF9C, что составляет 4 миллиарда или около того ... факт, что вы умножаете его на sizeof (источник) может немного его уменьшить ...

...