Memset
Zur Navigation springen
Zur Suche springen
memset (C-Funktion)
Die Funktion memset() ist Teil der Standardbibliothek von C und dient dazu, einen bestimmten Speicherbereich mit einem festen Wert zu füllen. Sie wird häufig verwendet, um Arrays, Strukturen oder Speicherbereiche vor der weiteren Verwendung zu initialisieren oder zu löschen.
Syntax
#include <string.h>
void* memset(void* ptr, int value, size_t num);
Parameter
- ptr – Zeiger auf den Beginn des Speicherbereichs, der verändert werden soll.
- value – Der Wert, mit dem der Speicher gefüllt wird. Nur die unteren 8 Bit (also ein einzelnes Byte) werden verwendet.
- num – Anzahl der Bytes, die im Speicher gesetzt werden sollen.
Rückgabewert
memset() gibt den Zeiger ptr zurück. Dadurch kann die Funktion direkt in Ausdrücken verwendet oder verschachtelt werden.
Funktionsweise
memset() schreibt den angegebenen Wert (ein Byte) in jedes der ersten num Bytes des durch ptr angegebenen Speicherbereichs.
Beispiel:
int arr[5];
memset(arr, 0, sizeof(arr));
→ Alle Bytes des Arrays werden auf 0 gesetzt. Dies entspricht einer Initialisierung mit Nullen.
Beispielprogramm
#include <stdio.h>
#include <string.h>
int main() {
char text[20];
// Speicher mit 'A' füllen
memset(text, 'A', sizeof(text));
// String terminieren, um sicher zu drucken
text[19] = '\0';
printf("Text: %s\n", text);
return 0;
}
Ausgabe:
Text: AAAAAAAAAAAAAAAAAAA
Typische Anwendungsfälle
- Initialisierung von Arrays oder Strukturen:
struct Data data;
memset(&data, 0, sizeof(data));
- Löschen sensibler Daten im Speicher (z. B. Passwörter)
- Vorbereitung von Puffern vor einer Eingabeoperation
Wichtige Hinweise
- memset() arbeitet byteweise — bei numerischen Arrays kann dies zu Missverständnissen führen:
int arr[3];
memset(arr, 1, sizeof(arr)); // setzt jedes Byte auf 0x01, NICHT jeden int auf 1!
- Soll jedes Element eines Arrays auf einen bestimmten Wert gesetzt werden, ist eine Schleife oder die Funktion for bzw. std::fill() in C++ oft sinnvoller.
- Falsche Verwendung kann zu Speicherfehlern führen, wenn num größer ist als der tatsächlich verfügbare Speicherbereich.
Siehe auch
Quellen
- ISO/IEC 9899:2018 (C18) – Programming Language C
- Kernighan, Brian W.; Ritchie, Dennis M.: The C Programming Language. Prentice Hall, 1988.
- GNU C Library Documentation