В чем разница между memset и memcpy в C - PullRequest
15 голосов
/ 08 октября 2009

Я прочитал заголовки функций, но я все еще не уверен, в чем именно разница с точки зрения использования.

Ответы [ 6 ]

40 голосов
/ 08 октября 2009

memcpy() копий из одного места в другое. memset() просто устанавливает все фрагменты памяти на одно и то же значение.

Пример:

memset(str, '*', 50);   

В приведенной выше строке для первых 50 символов строки str установлено значение * (или любой второй аргумент memset).

memcpy(str2, str1, 50); 

В строке выше копируются первые 50 символов строки str1 в строку str2.

16 голосов
/ 08 октября 2009

memset() устанавливает все байты в указанном буфере в то же значение, memcpy() копирует последовательность байтов из другого места в буфер.

char a[4];
memset(a, 7, sizeof(char)*4);
/*
* a is now...
*
* +-+-+-+-+
* |7|7|7|7|
* +-+-+-+-+
*/

char b[] = {1,2,3,4};
char c[4];
memcpy(c, b, sizeof(char)*4);
/*
* c is now...
*
* +-+-+-+-+
* |1|2|3|4|
* +-+-+-+-+
*/
3 голосов
/ 08 октября 2009

memset устанавливает блок памяти на одно значение. memcpy копирует содержимое блока в другой блок.

Возможно, вас заинтересует разница между memcpy и memmove. Оба делают то же самое, но последний работает, даже если источник и пункт назначения перекрываются.

2 голосов
/ 08 октября 2009

memset() используется для установки всех байтов в блоке памяти на определенное значение символа. Memset также хорошо работает только с char, так как это его значение инициализации.

memcpy() копирует байты между памятью. Этот тип копируемых данных не имеет значения, он просто делает побайтные копии.

0 голосов
/ 01 декабря 2015

заполнение memset память с постоянным байтом

void * memset (void * s, int c, size_t n);

Использование memset позволяет программисту напрямую заполнять память определенным образом. и memcpy использует constant void указатель на источник, который нельзя изменить.

memcpy копия память область

void * memcpy (void * dest, const void * src, size_t n);

Ссылка memcpy MemSet

0 голосов
/ 01 декабря 2015

memcpy() копий из одного места в другое. memset() просто устанавливает все части памяти на одно и то же.

Например, здесь для длины строки строки str устанавливается * (или любой второй аргумент memset).

memset(str, '*', strlen(str)+1);   

Здесь копирует длину строки src в dest.

memcpy(dest, src, strlen(src)+1);

...