Подтвердить что ты не робот

В чем разница между memset и memcpy в C

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

4b9b3361

Ответ 1

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

Пример:

memset(str, '*', 50);   

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

memcpy(str2, str1, 50); 

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

Ответ 2

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

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

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

Ответ 4

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

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

Ответ 5

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

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

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

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

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

Ответ 6

memset заполняет память с помощью константного байта

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

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

memcpy скопируйте область памяти

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

Ссылка memcpy        memset