close
Пространства имён
Варианты
Действия

std::memset

Материал из cppreference.com
 
 
 
Однобайтовые строки с завершающим нулём
Функции
Манипуляции с символами
Преобразование в числовые форматы
(C++11)(C++11)
(C++11)(C++11)
Манипуляции со строками
Проверка строки
Манипуляции с памятью
Разное
 
<tbody> </tbody>
Определено в заголовочном файле <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

Смотрите также

копирует один буфер в другой
(функция) [править]
перемещает один буфер в другой
(функция) [править]
копирует заданный широкий символ в каждую позицию в массиве широких символов
(функция) [править]
присваивает диапазону элементов определённое значение
(шаблон функции) [править]
присваивает значение определённому количеству элементов
(шаблон функции) [править]
проверяет, можно ли тривиально скопировать тип
(шаблон класса) [править]