Namensräume
Varianten
Aktionen

std::memset

Von cppreference.com
< cpp‎ | string‎ | byte
 
 
 
 
Definiert in 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 durch dest zeigenden Objekts. Wenn das Objekt ein potenziell überlappendes Unterobjekt 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 ist als die Größe des durch dest zeigenden Objekts, ist das Verhalten undefiniert.

Inhalt

[edit] Parameter

dest - Zeiger auf das zu füllende Objekt
ch - Füll-Byte
zählt - Anzahl der zu füllenden Bytes

[edit] Rückgabewert

dest

[edit] Hinweise

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

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

[edit] 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

[edit] Siehe auch

kopiert einen Puffer in einen anderen
(Funktion) [bearbeiten]
verschiebt einen Puffer in einen anderen
(Funktion) [bearbeiten]
kopiert das gegebene breite Zeichen in jede Position eines breiten Zeichen-Arrays
(Funktion) [bearbeiten]
Weist jedem Element in einem Bereich den gegebenen Wert zu
(Funktionstempelat) [edit]
Weist N Elementen in einem Bereich den gegebenen Wert zu
(Funktionstempelat) [edit]
prüft, ob ein Typ trivial kopierbar ist
(Klassenvorlage) [bearbeiten]
C-Dokumentation für memset