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 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"
Siehe auch
|
(C23)
|
weist eine Kopie eines Strings zu
(Funktion) |
|
(C11)
|
kopiert einen String zu einem anderen
(Funktion) |
|
weist Speicher zu
(Funktion) |
|
|
gibt zuvor zugewiesenen Speicher frei
(Funktion) |