strndup
|
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) |
|
(C11)
|
copia una cadena a otra
(función) |
|
asigna memoria
(función) |
|
|
desasigna memoria previamente asignada
(función) |