Segmentation fault in C with file -


i have segmentation fault in moment of second file in function imprimir, , dont know whats happend, because open , read firts not other file, confused me, please me

#include <stdio.h> #include <stdlib.h>  typedef struct {     char nombre[40];     int creditos;     float nota; } curso;  int conteo(file *_entrada); void semestre(file *_entrada,curso *_materias,int *_cantidad,int *_ganadas,int *_perdidas,float *_promedio); void imprimir(curso *_materias,int *_cantidad,int *_ganadas, int *_perdidas,float *_promedio);  int main(int argc, char *argv[]) {     int ganadas=0;     int perdidas=0;     float promedio=0.0;     int cantidad=0;     char *archivoentrada;     curso *materias;     printf("archivo de entrada \n");     scanf("%s",archivoentrada);     file *entrada;     entrada=fopen(archivoentrada,"r");     if(entrada==null)     {         printf("no se logro abrir el archivo de entrada\n");         exit(exit_failure);     }     cantidad=conteo(entrada);     printf("el numero de materias es: %d \n",cantidad);      materias=(curso *)malloc(sizeof(curso)*cantidad);      semestre(entrada,materias,&cantidad,&ganadas,&perdidas,&promedio);     imprimir(materias,&cantidad,&ganadas,&perdidas,&promedio);     free(materias); }  int conteo(file *_entrada) {     int i=0;     char auxiliar[40];     while(!feof(_entrada))     {         fgets(auxiliar,40,_entrada);         i++;     }     rewind(_entrada);     return i/3; }  void semestre(file *_entrada,curso *_materias,int *_cantidad,int *_ganadas,int *_perdidas,float *_promedio) {     int i=0;     int sumacreditos=0;     float sumanotas=0.0;     while(i<*_cantidad)     {         fscanf(_entrada, "%s", _materias->nombre);         fscanf(_entrada, "%d", &_materias->creditos);         sumacreditos=sumacreditos+(_materias->creditos);         fscanf(_entrada, "%f", &_materias->nota);         if((_materias->nota)>3.0)         {             *_ganadas=(*_ganadas)+1;         }     } }  void imprimir(curso *_materias,int *_cantidad,int *_ganadas, int *_perdidas,float *_promedio) {     fflush(stdin);     printf("ganadas %d \n",*_ganadas);     printf("perdidas %d \n",*_perdidas);     printf("prom %f \n",*_promedio);     char *archivosalida;     file *salida;     printf("archivo de salida \n");     scanf("%s",archivosalida);     salida=fopen(archivosalida,"w");     if(salida==null)     {         printf("no se logro abrir el archivo de salida\n");         exit(exit_failure);     }     //implementacion imprimir en archivo salida.txt } 

you have

char *archivosalida; 

and then

scanf("%s",archivosalida); 

the problem here pointer archivosalida doesn't point anywhere special. uninitialized local variables (like archivosalida is) have indeterminate value. using them without initialization leads undefined behavior, common cause of crashes.

instead might want use fixed-size array:

char archivosalida[256]; ... scanf("%255s",archivosalida); 

Comments

Popular posts from this blog

resizing Telegram inline keyboard -

command line - How can a Python program background itself? -

php - "cURL error 28: Resolving timed out" on Wordpress on Azure App Service on Linux -