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
Post a Comment