std::memset
Определено в заголовочном файле <cstring> | ||
void* memset(void* dest, int ch, std::size_t count ); | ||
Копирует значение static_cast<unsignedchar>(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 |