Programación General => C/C++ => Mensaje iniciado por: tirengarfio en Jueves 24 de Julio de 2008, 18:48
Título: Strcpy() y cadenas
Publicado por: tirengarfio en Jueves 24 de Julio de 2008, 18:48
Saludos,
cuando intento compilar este codigo
Código: Text
int main(int argc, char* argv[])
{
char cad1[100]="javi";
char * cad2;
cad2 ="hola";
strcpy( cad2, cad1);
printf ("%s", cad1);
return 0;
}
me da un error al ejecutarlo
pero cuando ejecuto este de aqui abajo no me da errores, por que?
Código: Text
int main(int argc, char* argv[])
{
char cad1[100]="javi";
char * cad2;
cad2 ="hola";
strcpy( cad1, cad2); // SOLO CAMBIO ESTA LINEA
printf ("%s", cad1);
return 0;
}
Ciao
Javi
Título: Re: Strcpy() y cadenas
Publicado por: ProfesorX en Jueves 24 de Julio de 2008, 21:01
Es muy sencillo, la razon es que no estas asignadole espacio en memoria a tu apuntador char *cad2, es un error muy comun para aquellos que comienzan con apuntadores, cuando declaras cad2 = "hola", por defecto le asigna 5 espacios (4 para las letras y uno para el caracter de fin de cadena), entonces a la hora que haces strcpy( cad2, cad1); como cad2 tiene espacio para 5, y cad1 tiene espacio para 100, por eso da error. al hacerlo al reves, cad1 tiene espacio suficiente para guardar 5 caracteres, ya que lo defines con espacio para 100.
La solucion es usar malloc/free para asignar/liberar la memoria si utilizas C, o new/delete si utilizas C++.
Suponiendo que uses C, ya que veo que usas printf y printf es de C, la solucion seria: