Memset

Aus dev.kaibel.net
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