Namensräume
Varianten
Aktionen

strndup

Von cppreference.com
< 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 von src zeigenden Zeichenkette enthält. Der Speicherplatz für die neue Zeichenkette wird so erhalten, als ob malloc aufgerufen worden wäre. Wenn das Nullterminierungszeichen nicht in den ersten size Bytes angetroffen wird, wird es an die duplizierte Zeichenkette angehängt.

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

Wenn ein Fehler auftritt, wird ein Nullzeiger zurückgegeben und errno kann gesetzt werden.

Inhalt

[bearbeiten] Parameter

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

[bearbeiten] Rückgabewert

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

[bearbeiten] Hinweise

Die Funktion ist identisch mit der POSIX strndup, mit der Ausnahme, dass sie errno im Fehlerfall setzen darf, aber nicht muss.

[bearbeiten] 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"

[bearbeiten] Siehe auch

(C23)
allokiert eine Kopie eines Strings
(Funktion) [bearbeiten]
kopiert einen String in einen anderen
(Funktion) [bearbeiten]
alloziert Speicher
(Funktion) [bearbeiten]
dealloziert zuvor allozierten Speicher
(Funktion) [bearbeiten]