std::memset
| 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) | |
| verschiebt einen Puffer in einen anderen (Funktion) | |
| kopiert das gegebene breite Zeichen in jede Position eines breiten Zeichen-Arrays (Funktion) | |
| Weist jedem Element in einem Bereich den gegebenen Wert zu (Funktionstempelat) | |
| Weist N Elementen in einem Bereich den gegebenen Wert zu (Funktionstempelat) | |
| (C++11) |
prüft, ob ein Typ trivial kopierbar ist (Klassenvorlage) |
| C-Dokumentation für memset
| |