Namespaces
Variants

strndup

From cppreference.net
< c ‎ | string ‎ | byte
Défini dans l'en-tête <string.h>
char * strndup ( const char * src, size_t size ) ;
(depuis C23)

Retourne un pointeur vers une chaîne d'octets terminée par un caractère nul, qui contient des copies d'au plus size octets de la chaîne pointée par src . L'espace pour la nouvelle chaîne est obtenu comme si malloc était appelé. Si le terminateur nul n'est pas rencontré dans les premiers size octets, il est ajouté à la chaîne dupliquée.

Le pointeur retourné doit être passé à free pour éviter une fuite de mémoire.

Si une erreur se produit, un pointeur nul est retourné et errno pourrait être défini.

Table des matières

Paramètres

src - pointeur vers la chaîne d'octets terminée par un caractère nul à dupliquer
size - nombre maximal d'octets à copier depuis src

Valeur de retour

Un pointeur vers la chaîne nouvellement allouée, ou un pointeur nul si une erreur s'est produite.

Notes

La fonction est identique à la POSIX strndup sauf qu'elle est autorisée, mais pas obligée, à définir errno en cas d'erreur.

Exemple

#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: pas de '\0' final
    dup = strndup(arr, n);
    printf("strndup({'A','B','C','D'}, %lu) == \"%s\"\n", n, dup);
    free(dup);
}

Sortie :

strndup("Replica", 3) == "Rep"
strndup("Hi", 3) == "Hi"
strndup({'A','B','C','D'}, 3) == "ABC"

Voir aussi

(C23)
alloue une copie d'une chaîne de caractères
(fonction)
copie une chaîne de caractères vers une autre
(fonction)
alloue de la mémoire
(fonction)
libère la mémoire précédemment allouée
(fonction)