• Domingo 28 de Abril de 2024, 18:30

Autor Tema:  Strcpy() y cadenas  (Leído 1615 veces)

tirengarfio

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Strcpy() y cadenas
« en: Jueves 24 de Julio de 2008, 18:48 »
0
Saludos,

cuando intento compilar este codigo

Código: Text
  1.  
  2. int main(int argc, char* argv[])
  3. {
  4.     char cad1[100]="javi";
  5.    
  6.     char * cad2;
  7.  
  8.     cad2 ="hola";
  9.  
  10.     strcpy( cad2, cad1);
  11.  
  12.     printf ("%s", cad1);
  13.  
  14.     return 0;
  15.  
  16.  
  17. }
  18.  
  19.  
  20.  

me da un error al ejecutarlo


pero cuando ejecuto este de aqui abajo no me da errores, por que?

Código: Text
  1.  
  2. int main(int argc, char* argv[])
  3. {
  4.     char cad1[100]="javi";
  5.    
  6.     char * cad2;
  7.  
  8.     cad2 ="hola";
  9.  
  10.     strcpy( cad1, cad2);  // SOLO CAMBIO ESTA LINEA
  11.  
  12.     printf ("%s", cad1);
  13.  
  14.     return 0;
  15.  
  16. }
  17.  
  18.  

Ciao

Javi

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Strcpy() y cadenas
« Respuesta #1 en: Jueves 24 de Julio de 2008, 21:01 »
0
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:

Código: C
  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5.  
  6. int main(int argc, char* argv[])
  7. {
  8.     char cad1[100]="javi";
  9.    
  10.     char *cad2 = (char*) malloc(sizeof(char) * 100);
  11.  
  12.     strcpy(cad2, "hola"); //cuando usas apuntadores, debes usar strcpy para asignar en lugar de cad2 ="hola"
  13.  
  14.     strcpy( cad2, cad1);
  15.  
  16.     printf ("%s", cad1);
  17.  
  18.     // Cuando terminas de usar el apuntador, debs liberar la memoria con free
  19.     free (cad2);
  20.  
  21.     return 0;
  22.  
  23. }
  24.  
  25.  

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================