strndup
| 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) |
| (C11) |
kopiert einen String in einen anderen (Funktion) |
| alloziert Speicher (Funktion) | |
| dealloziert zuvor allozierten Speicher (Funktion) |