Namespaces
Variants

std:: memset

From cppreference.net
Definiert im Header <cstring>
void * memset ( void * dest, int ch, std:: size_t count ) ;

Kopiert den Wert static_cast < unsigned char > ( ch ) in jedes der ersten count Zeichen des Objekts, auf das dest zeigt. Wenn das Objekt ein potenziell überlappendes Teilobjekt ist oder nicht TriviallyCopyable ist (z.B. Skalar, C-kompatible Struktur oder ein Array von trivial kopierbarem Typ), ist das Verhalten undefiniert. Wenn count größer als die Größe des Objekts ist, auf das dest zeigt, ist das Verhalten undefiniert.

Inhaltsverzeichnis

Parameter

dest - Zeiger auf das zu füllende Objekt
ch - Füllbyte
count - Anzahl der zu füllenden Bytes

Rückgabewert

dest

Hinweise

std::memset kann wegoptimiert werden (gemäß den as-if Regeln), wenn das von dieser Funktion modifizierte Objekt für den Rest seiner Lebensdauer nicht mehr aufgerufen wird (z.B. gcc bug 8537 ). Aus diesem Grund kann diese Funktion nicht zum Überschreiben von Speicher verwendet werden (z.B. um ein Array, das ein Passwort enthielt, mit Nullen zu füllen).

Lösungen dafür umfassen std::fill mit flüchtigen Zeigern, (C23) memset_explicit() , (C11) memset_s , FreeBSD explicit_bzero oder Microsoft SecureZeroMemory .

Beispiel

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

Ausgabe:

00000011000000110000001100000011
00000011000000110000001100000011
00000011000000110000001100000011
00000011000000110000001100000011

Siehe auch

kopiert einen Puffer in einen anderen
(Funktion)
verschiebt einen Puffer in einen anderen
(Funktion)
kopiert das gegebene Breitzeichen an jede Position in einem Breitzeichen-Array
(Funktion)
weist den gegebenen Wert jedem Element in einem Bereich kopierend zu
(Funktions-Template)
weist den gegebenen Wert N Elementen in einem Bereich kopierend zu
(Funktions-Template)
prüft, ob ein Typ trivial kopierbar ist
(Klassen-Template)
C-Dokumentation für memset