Namespaces
Variants

strndup

From cppreference.net
< c ‎ | string ‎ | byte
Definido en el encabezado <string.h>
char * strndup ( const char * src, size_t size ) ;
(desde C23)

Devuelve un puntero a una cadena de bytes terminada en nulo, que contiene copias de como máximo size bytes desde la cadena apuntada por src . El espacio para la nueva cadena se obtiene como si se hubiera llamado a malloc . Si no se encuentra el terminador nulo en los primeros size bytes, se añade a la cadena duplicada.

El puntero devuelto debe pasarse a free para evitar una fuga de memoria.

Si ocurre un error, se devuelve un puntero nulo y errno podría establecerse.

Contenidos

Parámetros

src - puntero a la cadena de bytes terminada en nulo a duplicar
size - número máximo de bytes a copiar desde src

Valor de retorno

Un puntero a la cadena recién asignada, o un puntero nulo si ocurrió un error.

Notas

La función es idéntica a la POSIX strndup excepto que está permitido, pero no requerido, establecer errno en caso de error.

Ejemplo

#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);
}

Salida:

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

Véase también

(C23)
asigna una copia de una cadena
(función)
copia una cadena a otra
(función)
asigna memoria
(función)
desasigna memoria previamente asignada
(función)