std::memset
Defined in header <cstring> |
||
|---|---|---|
void* memset( void* dest, int ch, std::size_t count ); |
Копирует значение static_cast<unsigned char>(ch) в каждый из первых count символов объекта, на который указывает dest. Если объект является потенциально перекрывающимся подобъектом или не является TriviallyCopyable (например, скаляр, C-совместимый структуру или массив типа, который является trivially copyable), поведение не определено. Если count больше, чем размер объекта, на который указывает dest, поведение не определено.
Параметры
| dest | - | указатель на объект, который нужно заполнить |
| ch | - | байт заполнения |
| count | - | количество байтов для заполнения |
Возвращаемое значение
dest
Примечания
std::memset может быть оптимизирован (в соответствии с правилами as-if), если к объекту, изменённому этой функцией, больше не обращаются за время его существования (например, баг gcc 8537). По этой причине эту функцию нельзя использовать для очистки памяти (например, для заполнения массива, хранящего пароль, нулями).
Решение этой проблемы включает в себя использование std::fill с указателями volatile, (C23) memset_explicit(), (C11) memset_s, FreeBSD explicit_bzero или Microsoft SecureZeroMemory.
Пример
#include <bitset>
#include <climits>
#include <cstring>
#include <iostream>
int main()
{
int a[4];
using bits = std::bitset<sizeof(int) * CHAR_BIT>;
std::memset(a, 0b1111'0000'0011, sizeof a);
for (int ai : a)
std::cout << bits(ai) << '\n';
}Вывод:
00000011000000110000001100000011 00000011000000110000001100000011 00000011000000110000001100000011 00000011000000110000001100000011
См. также
| копирует один буфер в другой (функция) |
|
| перемещает один буфер в другой (функция) |
|
| копирует заданный широкий символ в каждую позицию массива широких символов (функция) |
|
| копирует заданное значение в каждый элемент в диапазоне (шаблон функции) |
|
| копирует заданное значение в N элементов в диапазоне (шаблон функции) |
|
|
(C++11) |
проверяет, является ли тип trivially copyable (шаблон класса) |
C документация для memset |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/string/byte/memset