В чем разница между memset и memcpy в C
Вопрос
Я прочитал заголовки функций, но я все еще не уверен, в чем именно разница с точки зрения вариантов использования.
Решение
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()
копирует байты из одной памяти в другую.Этот тип копируемых данных не имеет значения, он просто создает побайтовые копии.
заполнение набора данных память с постоянным байтом
void *memset(void *s, int c, size_t n);
Использование memset заключается в том, что программист может напрямую заполнять память определенным.и memcpy использует постоянный аннулирует указатель на источник, который не может быть изменен.
memcpy копирует память площадь
void *memcpy(void * dest, const void *src, size_t n);
memcpy()
копирует из одного места в другое. memset()
просто устанавливает все фрагменты памяти одинаковыми.
Например, здесь задается длина строки string в * (или любой другой второй аргумент memset).
memset(str, '*', strlen(str)+1);
Здесь копируется длина строки string src в dest.
memcpy(dest, src, strlen(src)+1);