elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Fallo de segmentacion con fgets y Array de cadenas.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Fallo de segmentacion con fgets y Array de cadenas.  (Leído 7,119 veces)
samur88

Desconectado Desconectado

Mensajes: 125


Ver Perfil
Fallo de segmentacion con fgets y Array de cadenas.
« en: 3 Marzo 2011, 03:15 am »

Saludos.

Tengo la siguiente duda, estoy implementando un array de cadenas de caracteres de la siguiente forma, pero me da fallo de segmentación cuando intento guardar los datos, necesito usar una función que controle el número de caracteres a insertar como fgets, pero no conozco ninguna y fgets me da dicho error.
Me gustaría saber por ocurra el fallo de segmentación y si hay alguna forma de solucionarlo.
Dejo el código a continuación:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef char *strings;
  6.  
  7. int main(){
  8.  
  9.    strings info_variable[4];
  10.  
  11.    fgets(info_variable[0],30,stdin);
  12.  
  13.    printf("%s",info_variable[0]);
  14.  
  15.    getchar();
  16.  
  17.    return 1;    
  18. }
  19.  


En línea

.:BlackCoder:.


Desconectado Desconectado

Mensajes: 388


Cada dia C++!!


Ver Perfil
Re: Fallo de segmentacion con fgets y Array de cadenas.
« Respuesta #1 en: 3 Marzo 2011, 03:29 am »

Creo que debes asignarle memoria a esas cadenas... O hazlo asi:

Código
  1. typedef char strings[30];

Saludos...


En línea

"No te esfuerzes por saber mas, esfuerzate por ser el mejor en lo que sabes... Y asi sabras mas" .:BlackCoder:. jajaja



Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Fallo de segmentacion con fgets y Array de cadenas.
« Respuesta #2 en: 3 Marzo 2011, 03:35 am »

Tal cual dice BlackCoder. Cuando declarás una variable tipo char* tenés que pedirle memoria antes a la máquina para poder almacenar algo ahí! (a menos que le quieras asignar otra variable tipo char*, ahí no deberías pedir memoria).
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Fallo de segmentacion con fgets y Array de cadenas.
« Respuesta #3 en: 3 Marzo 2011, 04:46 am »

.
la logica del uso de los punteros en base a la memoria esta herrada.

Código
  1.  
  2. #include <stdio.h>
  3.  
  4. typedef char strings;
  5.  
  6. int main(){
  7.    strings info_variable[10];
  8.    fgets((char*)&info_variable[0],10,stdin);
  9.    printf("%s",&info_variable[0]);
  10.    fflush(stdout);
  11.    getchar();
  12.    return 0; //0 = EXIT SUCCESS,  otro valor es un error.
  13. }
  14.  
  15.  

o

Código
  1.  
  2. #include <stdio.h>
  3.  
  4. typedef char strings;
  5.  
  6. int main(){
  7.    strings info_variable[10];
  8.    fgets ((char*)&info_variable[0],10,stdin);
  9.    fputs ((const char*)&info_variable[0],stdout);
  10.    getchar();
  11.    return 0; //0 = EXIT SUCCESS,  otro valor es un error.
  12. }
  13.  
  14.  
« Última modificación: 6 Marzo 2011, 22:47 pm por BlackZeroX▓▓▒▒░░ » En línea

The Dark Shadow is my passion.
Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Fallo de segmentacion con fgets y Array de cadenas.
« Respuesta #4 en: 3 Marzo 2011, 18:55 pm »

Código:
No uses fflush...

No sé si está solucionado, pero creo que el fallo está...
[code=c]
typedef char *strings;
 
int main(){
 
    strings info_variable[4];
 
    fgets(info_variable[0],30,stdin);
 
Defines strings como un puntero a un char... Puede que por eso te dé error. Yo prefiero usar arrays de toda la vida :P

A ver si esto te ayuda:
Código
  1. #include <stdio.h>
  2.  
  3. int main ()
  4. {
  5. char info_variable [4] [30]; int i;
  6.  
  7. for (i=0; i<4; i++)
  8. {
  9. fgets (info_variable [i], 30, stdin);
  10. printf ("%s", info_variable [i]);
  11. }
  12.  
  13. return 0;
  14. }
  15.  

Te pongo los for porque creo que tu código será más largo :P
Un saludo!

Sagrini[/code]
« Última modificación: 5 Marzo 2011, 22:02 pm por Sagrini » En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
samur88

Desconectado Desconectado

Mensajes: 125


Ver Perfil
Re: Fallo de segmentacion con fgets y Array de cadenas.
« Respuesta #5 en: 4 Marzo 2011, 15:09 pm »

Muchísimas gracias por las respuestas, me han sido de gran ayuda para comprender mejor los punteros.
Una preguntita, ¿con malloc habría alguna forma también de hacer lo que quiero?

El caso es que quiero hacer eso por que tengo una función para meter datos en una estructura y los datos para simplificar el código se los quiero pasar mediante un array de cadenas.
¿Que veis mejor utilizar un array de cadenas o pasarle una estructura a la función con dichos datos? es mas que nada para quitarme complicaciones de punteros.
Un saludo y gracias de nuevo.
En línea

Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Fallo de segmentacion con fgets y Array de cadenas.
« Respuesta #6 en: 4 Marzo 2011, 21:27 pm »

Con malloc es exactamente la misma estructura.

Un saludo!
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
samur88

Desconectado Desconectado

Mensajes: 125


Ver Perfil
Re: Fallo de segmentacion con fgets y Array de cadenas.
« Respuesta #7 en: 4 Marzo 2011, 22:23 pm »

Pero tengo que usar estructuras para usar malloc, ¿no?
¿Que es mejor los métodos expuestos o usar una estructura?
En línea

Garfield07


Desconectado Desconectado

Mensajes: 1.121


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Fallo de segmentacion con fgets y Array de cadenas.
« Respuesta #8 en: 5 Marzo 2011, 17:40 pm »

Creo que no tienes ni idea de qué es malloc ()... Sin ofender :P el desconocimiento te lleva al saber...
Código:
 http://c.conclase.net/librerias/?ansifun=malloc 

Un saludo!
PD: No, no hacen falta estructuras :P Léete eso...
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Fallo de segmentacion con fgets y Array de cadenas.
« Respuesta #9 en: 5 Marzo 2011, 20:59 pm »

.
fflush() --> Forza la "muestra" de los datos en el buffer, y a su vez vacia a la misma, alternativa -> "\n".

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[ASM]Syscall no me funciona + fallo de segmentacion
ASM
ny0x 5 4,635 Último mensaje 14 Junio 2009, 19:38 pm
por ny0x
Fallo de segmentación!!
Programación C/C++
<[(x)]> 6 3,793 Último mensaje 13 Julio 2010, 06:44 am
por nicolas_cof
Fallo de segmentación
Programación C/C++
W0lFy 2 4,039 Último mensaje 21 Octubre 2010, 01:09 am
por W0lFy
[?] Fallo de segmentación - C
Programación C/C++
8789poli 3 4,674 Último mensaje 14 Diciembre 2010, 19:50 pm
por 8789poli
Fallo de segmentacion
Programación C/C++
_niu 9 5,496 Último mensaje 29 Agosto 2011, 02:58 am
por _niu
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines