Namespaces
Variants

strndup

From cppreference.net
< c ‎ | string ‎ | byte
Definiert in Header <string.h>
char * strndup ( const char * src, size_t size ) ;
(seit C23)

Gibt einen Zeiger auf eine nullterminierte Byte-Zeichenkette zurück, die Kopien von höchstens size Bytes aus der Zeichenkette enthält, auf die src zeigt. Der Speicher für die neue Zeichenkette wird so beschafft, als ob malloc aufgerufen worden wäre. Wenn das Nullterminierungszeichen in den ersten size Bytes nicht gefunden wird, wird es an die duplizierte Zeichenkette angehängt.

Der zurückgegebene Zeiger muss an free übergeben werden, um einen Speicherverlust zu vermeiden.

Wenn ein Fehler auftritt, wird ein Nullzeiger zurückgegeben und errno könnte gesetzt werden.

Inhaltsverzeichnis

Parameter

src - Zeiger auf die nullterminierte Byte-Zeichenkette, die dupliziert werden soll
size - maximale Anzahl an Bytes, die von src kopiert werden sollen

Rückgabewert

Ein Zeiger auf die neu zugewiesene Zeichenkette oder ein Nullzeiger, falls ein Fehler aufgetreten ist.

Hinweise

Die Funktion ist identisch mit POSIX strndup , außer dass es erlaubt, aber nicht erforderlich ist, errno bei einem Fehler zu setzen.

Beispiel

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    const size_t n = 3;
    const char *src = "Replica";
    char *dup = strndup(src, n);
    printf("strndup(\"%s\", %lu) == \"%s\"\n", src, n, dup);
    free(dup);
    src = "Hi";
    dup = strndup(src, n);
    printf("strndup(\"%s\", %lu) == \"%s\"\n", src, n, dup);
    free(dup);
    const char arr[] = {'A','B','C','D'}; // NB: no trailing '\0'
    dup = strndup(arr, n);
    printf("strndup({'A','B','C','D'}, %lu) == \"%s\"\n", n, dup);
    free(dup);
}

Ausgabe:

strndup("Replica", 3) == "Rep"
strndup("Hi", 3) == "Hi"
strndup({'A','B','C','D'}, 3) == "ABC"
**Übersetzungsdetails:** - "Run this code" → "Diesen Code ausführen" - "Output:" → "Ausgabe:" - HTML-Tags, Attribute und Code-Blöcke wurden unverändert belassen - C++-spezifische Begriffe (wie Funktionsnamen, Typen) wurden nicht übersetzt - Formatierung und Struktur wurden originalgetreu beibehalten

Siehe auch

(C23)
weist eine Kopie eines Strings zu
(Funktion)
kopiert einen String zu einem anderen
(Funktion)
weist Speicher zu
(Funktion)
gibt zuvor zugewiesenen Speicher frei
(Funktion)