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

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

6 ответов


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

пример:

memset(str, '*', 50);   

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

memcpy(str2, str1, 50); 

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


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|
* +-+-+-+-+
*/

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

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


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

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


memset fill с постоянным байт

недействительным *функцию memset(Void*, который с инт С, в size_t Н);

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

memcpy скопируйте площадью

недействительным *функции memcpy(Void *после дест пустоту константные *в src, size_t в Н);

ссылка memcpy функцию memset


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

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

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

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

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