La función strncpy
en el lenguaje C es una mejora (o alternativa) de la función strcpy
que quiere decir string copy. La n indica el conteo que se copia, que en términos simples podrían ser caracteres.
Entonces la diferencia es que strncpy
copia solo determinada cantidad de caracteres, contraria a strcpy
que copia todo; con el riesgo de que ocurra un desbordamiento de búfer.
En este post te mostraré la sintaxis de strncpy
y su modo de uso con ejemplos.
Sintaxis de strncpy
Para usar esta función debes incluir el encabezado string.h:
#include<string.h>
Su modo de uso es:
strncpy(destino, fuente, cantidad_a_copiar);
Lo que hará que a destino
se le asigne lo que hay en fuente
, determinando la cantidad de caracteres que se copian con el tercer argumento. En los ejemplos se verá con más claridad.
Recuerda que tanto destino como fuente deben ser cadenas, o mejor dicho, un arreglo de caracteres.
Ejemplo de strncpy
Veamos un ejemplo. En este caso vamos a copiar solo un carácter de una cadena a otra:
#include <stdio.h>
#include <string.h> // strncpy
#define MAXIMA_LONGITUD_CADENA 50
int main(void) {
char nombre[MAXIMA_LONGITUD_CADENA] = "Luis";
char temporal[MAXIMA_LONGITUD_CADENA] = "";
// Copia a temporal, lo que hay en nombre, pero solo copia 1 caracter
strncpy(temporal, nombre, 1);
printf("Nombre: %s. Temporal: %s", nombre, temporal);
return 0;
}
La salida del programa será:
Nombre: Luis. Temporal: L
Como puedes ver, solo se copió una letra.
Otro ejemplo de strncpy
El uso que más se le da a esta función es para asignar cadenas e intercambiarlas, pues en C no podemos hacer algo como:
cadena = otraCadena;
Así que debemos usar strncpy
. Aquí vemos el ejemplo:
// https://parzibyte.me/blog
#include <stdio.h>
#include <string.h> // strncpy
#define MAXIMA_LONGITUD_CADENA 50
int main(void)
{
char nombre[MAXIMA_LONGITUD_CADENA] = "Luis";
char otroNombre[MAXIMA_LONGITUD_CADENA] = "Maria";
char temporal[MAXIMA_LONGITUD_CADENA];
printf("Nombre: %s. Otro nombre: %s\n", nombre, otroNombre);
/*
Ahora vamos a intercambiar los nombres. En un escenario ideal haríamos:
temporal = nombre;
nombre = otroNombre;
otroNombre = temporal;
Pero no es posible
*/
// Copia a temporal, lo que hay en nombre, pero solo copia
// MAXIMA_LONGITUD_CADENA de bytes
strncpy(temporal, nombre, MAXIMA_LONGITUD_CADENA);
// Copia a nombre, lo que hay en otroNombre
strncpy(nombre, otroNombre, MAXIMA_LONGITUD_CADENA);
// Y copia a otroNombre, lo que hay en temporal
strncpy(otroNombre, temporal, MAXIMA_LONGITUD_CADENA);
printf("Nombre: %s. Otro nombre: %s", nombre, otroNombre);
return 0;
}
En este caso la salida será:
Nombre: Luis. Otro nombre: Maria
Nombre: Maria. Otro nombre: Luis
Para terminar te dejo con más tutoriales sobre C.