std::memset
| Определено в заголовочном файле <cstring>
|
||
void* memset( void* dest, int ch, std::size_t count ); |
||
Копирует значение static_cast<unsigned char>(ch) в каждый из первых count символов объекта, на который указывает dest. Если объект представляет собой потенциально перекрывающийся подобъект или не является TriviallyCopyable (например, скалярная, C-совместимая структура или массив тривиально копируемого типа), поведение не определено. Если count больше размера объекта, на который указывает dest, поведение не определено.
Параметры
| dest | — | указатель на объект для заполнения |
| ch | — | байт заполнения |
| count | — | количество байт для заполнения |
Возвращаемое значение
dest
Примечание
std::memset может быть оптимизирован (в соответствии с правилами как есть), если к объекту, изменённому этой функцией, больше не осуществляется доступ до конца его жизни (например, баг 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
Смотрите также
| копирует один буфер в другой (функция) | |
| перемещает один буфер в другой (функция) | |
| копирует заданный широкий символ в каждую позицию в массиве широких символов (функция) | |
| присваивает диапазону элементов определённое значение (шаблон функции) | |
| присваивает значение определённому количеству элементов (шаблон функции) | |
(C++11) |
проверяет, можно ли тривиально скопировать тип (шаблон класса) |
Документация C по memset
| |