• Jueves 2 de Mayo de 2024, 22:36

Autor Tema:  Problema struct y strcpy.  (Leído 1319 veces)

Ommadawn

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Problema struct y strcpy.
« en: Miércoles 29 de Septiembre de 2010, 21:35 »
0
Hola a todos, primeramente decir que soy nuevo en este foro ya que me acabo de registrar, aunque llevo un tiempo satisfaciendo mis dudas de C leyendo muchos de los post que hay aqui... pero tengo un problema con un trozo de codigo y como no he encontrado nada parecido pues he creado este nuevo post, ahi va el asunto...

Con el siguente codigo pretendo meter una cadena de caracteres apuntada por "p" en aux->ristras_numericas...
Código: Text
  1.  
  2.      struct ristras_numericas
  3.      {
  4.         char ristra_numerica[19];
  5.         ......
  6.      };
  7.  
  8.      struct ristras_numericas *aux;
  9.      char *p,cadena[50];
  10.      ....
  11.      ....
  12.      aux=(struct ristras_numericas *)malloc(sizeof(struct ristras_numericas));
  13.      p=strtok(cadena,"!n");
  14.      
  15.      [b]strcpy(aux->ristra_numerica,p); //FALLO SEGMENTACION EN LA EJECUCION[/b]
  16.  
  17.  
Compilado con gcc no da fallos de compilacion pero en la ejecucion con el terminal de ubunto me da un fallo de segmentacion y he podido comprobar que es en la istruccion strcpy... pero no me lo explico... alguna idea?? GRACIAS

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re: Problema struct y strcpy.
« Respuesta #1 en: Jueves 30 de Septiembre de 2010, 03:11 »
0
Me parece que ya se cual es el error, que pasa si la cadena que vas a copiar es mas grande que el tamaño de la variable. En ese caso habria corrupcion de memoria, y por lo tanto, un segment fault.

Seria mejor que utilizaras strncpy en lugar de strcpy, ya que de esa forma garantizas que nunca trataras de leer mas caracteres de los que puede guardar tu variable, recuerda siempre leer un caracter menos del tamaño de tu arreglo, para guardar lugar al caracter de fin de cadena ''

En este caso tu variable tiene 19 espacios, entonces lees 18, y en la ultima posicion que es la 18 guardas el ''. Recuerda, los arreglos comienzan en cero, por lo tanto un arreglo de 19 espacios va del 0 al 18

Código: C++
  1.  
  2.      aux=(struct ristras_numericas *)malloc(sizeof(struct ristras_numericas));
  3.      p=strtok(cadena,"!n");
  4.      
  5.      strncpy(aux->ristra_numerica, p, 18);
  6.      aux->ristra_numerica[18] = '';
  7.  
  8.  

Saludos :)

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

Ommadawn

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Problema struct y strcpy.
« Respuesta #2 en: Sábado 2 de Octubre de 2010, 00:39 »
0
Gracias por tu respuesta.  :good: Me apuntare la funcion strncpy ya que no la conocia mucho y me paece ineresante par ciertas cosas.... finalmente no he encontrado el fallo pero he conseguido solucionarlo... simplemente he llenado antes algun campo del struct que no fuera el char ristra_numerica para despues pasar a llenar el ristra_numerica y me funciona  la perfeccion... no le encuentro mucha logica pero ya no da fallo de segmentacion...