Título: segmentation fault en mi programa Publicado por: :Luigi en 29 Noviembre 2014, 14:53 pm Buenas a todos. Me registre hace mucho tiempo (no recuerdo porque motivo) pero nunca he posteado nada. Ahora estoy estudiando programacion en C de forma autodidacta y es ahora cuando necesito esa ayuda que puede aportarme este foro (no puedo permitirme un profesor particular economicamente).Os agradecere toda ayuda recibida.
Bueno, tengo que hacer un ejercicio en el que se pregunta al usuario el nombre de un archivo de texto y el programa debe abrir dicho archivo y mostrar 25 lineas hasta que se pulse una tecla y mostrar otras 25, asi hasta la marca eof del archivo en si. El problema esta en que al compilarlo me da 0 errores pero al ejecutarlo me da "segmentation fault (core dumped)" dentro de la terminal donde lo ejecuto: Código: #include <stdio.h> La verdad no se si es que no se usar alguna funcion bien o que es. Me gustaria si es posible que no me corrigierais el codigo (me gusta intentarlo yo mismo para aprender) sino que me gustaria saber el porque de ese error en este codigo o que funcion es la que me falla y me ayudeis a entenderla. He leido tambien un post aqui mismo en el que se dice que hay funciones que no se deberian usar y yo utilizo aqui pero estoy obligado a ello. Gracias de antemano!!! PD: Utilizo un curso de C escrito por Nacho Cabanes, si sabeis de alguno que sea mejor que ese os lo agradeceria muchisimo. Título: Re: segmentation fault en mi programa Publicado por: avesudra en 29 Noviembre 2014, 16:29 pm Hola, si pones cualquier cadena e imprimes rutatemp, te salen unos caracteres raros al principio:
Código: Escribe el nombre de archivo para abrirlo Código Fill block of memory Sets the first num bytes of the block of memory pointed by ptr to the specified value (interpreted as an unsigned char). En concreto tienes que poner esto para inicializar esa zona de memoria en cero: Código Otra forma de hacerlo sin usar memset es: Código
También deberías controlar la entrada con la funciones fgets + sscanf. Además debes mirar si el archivo se ha abierto, si no te dará el segmentation fault. Con un simple if lo puedes comprobar: Código
Sé que no querías código pero la mejor manera es ejemplificando, la programación es aprender de los errores, si alguien te puede sacar de estos comederos de cabeza mejor. Un saludo. Título: Re: segmentation fault en mi programa Publicado por: rir3760 en 29 Noviembre 2014, 16:37 pm Como ya te menciono avesudra el error es utilizar la función strcat en la linea:
Código Esto porque si no se inicializa una variable su valor inicial es no definido o basura. La forma mas fácil de solucionarlo es utilizando en su lugar la función strcpy: Código También hay que cambiar la definición de la funcion main, indicar su valor de retorno y evitar el uso de la función gets, mas información en el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html). Un saludo Título: Re: segmentation fault en mi programa Publicado por: :Luigi en 30 Noviembre 2014, 23:37 pm Hola muy buenas y gracias por vuestras respuestas. Lo primero es que la funcion gets aunque se que es peligrosa usarla (te lo dice el propio compilador) me veo obligado por el propio ejercicio.
Lo del strcat(rutatemp,RUTA); lo cambie por un strcpy como bien me deciais para que se iniciase la variable bien. Puse tambien antes del while un Código: printf("archivo abierto");getchar(); basicamente para asegurarme de que el archivo se podia abrir, ademas cambie el "rt" del fopen por tansolo "r". Puse un if que estaba en el exterior del while para evitar que si no se podia abrir el archivo se fastidiara el programa. Código: if(archivo != NULL); Al final del todo el codigo quedo asi, lo dejo por si alguien lo necesita por el mismo error o ejercicio: Código: /* lectura de ficheros por nombre Muchas gracias por haber contestado, me ha ayudado mucho. |