Si la cadena fuente es de longitud mayor que la cadena destino, se cae en el gravísimo error de sobrescribir después del final de la cadena fuente. Una variante de esta función y que ayuda a eliminar el efecto colateral arriba expresado es utilizar la función strncpy, stpncpy(var_cadena, cadena2, cantidad) que posee un tercer parámetro (cantidad) para indicar cuántos caracteres serán transferidos. Una vez transferidos los caracteres, debe escribirse en la cadena destino el carácter null.
Ejemplo
#include <iostream.h> #include <string.h> void main(void) { char destino[10]; char origen[] = "abcdefghi"; strncpy(destino, origen, 3); destino[3] = '\0'; //Si esto no se hace, la salida es imprevisible cout << destino<< '\n'; }
La salida sería:
abc Es bueno destacar que si una cadena se define con un constructor corriente de arreglo, como en:
char cadena[6];
no resultaría posible hacer:
cadena = "casa"; // ERROR
pues, como sabemos, no es posible aplicar el operador de asignación para arreglos completos. Entonces usaríamos: strcpy(cadena, "casa"); lo cual es mejor que la solución de copiar de una cadena para otra carácter a carácter:
for(i = 0; i < strlen(cadena2); i++) var_cadena[i] = cadena2[i]; var_cadena[i] = '\0'; // carácter nulo de terminación }
No hay comentarios:
Publicar un comentario