std::memset

From cppreference.com
< cpp‎ | string‎ | byte
Defined in header <cstring>
void * memset( void * dest, int ch, std::size_t count ) ;

Copies the value static_cast < unsigned char > (ch) into each of the first count characters of the object pointed to by dest. If the object is a potentially-overlapping subobject or is not TriviallyCopyable (e.g., scalar, C-compatible struct, or an array of trivially copyable type), the behavior is undefined. If count is greater than the size of the object pointed to by dest

Parameters

dest - pointer to the object to fill
ch - fill byte
count - number of bytes to fill

Return value

dest

Notes

std::memset may be optimized away (under the as-if rules) if the object modified by this function is not accessed again for the rest of its lifetime (e.g., gcc bug 8537

Solutions for that include std::fill with volatile pointers, (C23) memset_explicit(), (C11) memset_s, FreeBSD explicit_bzero or Microsoft SecureZeroMemory

Example

#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';
}

Output:

00000011000000110000001100000011
00000011000000110000001100000011
00000011000000110000001100000011
00000011000000110000001100000011

See also

copies one buffer to another
(function)
moves one buffer to another
(function)
copies the given wide character to every position in a wide character array
(function)
copy-assigns the given value to every element in a range
(function template)
copy-assigns the given value to N elements in a range
(function template)
checks if a type is trivially copyable
(class template)
C documentation for memset