Fallo de segmentación (núcleo volcado) cuando se usa fscanf para leer en un puntero

Estoy tratando de usar fscanf para leer e imprimir todos los caracteres en la pantalla, pero tengo un error de segmentación (núcleo volcado) cuando ejecuto el progtwig. Aquí está mi código:

#include  main(int argc, char * argv[]) { int *a ; FILE *input; if (argc>=2) { input= fopen(argv[1],"r"); if (input!=NULL) { while (feof(input)==0) { fscanf(input,"%d\n",a); printf("%d\n",*a); } fclose(input); } else { printf("Error!\n"); } } } 

Proporciono el archivo como un argumento, como este:

 ./myprog input.txt 

El archivo input.txt contiene esto:

 23 47 55 70 

La variable a no se inicializa para apuntar a una dirección de memoria válida.

Por lo tanto, lo más probable es que apunte a una dirección de memoria no válida.

Aquí hay una forma de solucionarlo:

 int *a = malloc(sizeof(int)); ... free(a); // when done using it 

Aquí hay otra forma de solucionarlo:

 int b; int *a = &b; 

Pero le sugiero que siga los pasos a continuación para hacerlo más simple y limpio …


Cambia esto:

 int *a; 

A esto:

 int a; 

Y esto:

 fscanf(input,"%d\n",a); 

A esto:

 fscanf(input,"%d\n",&a); 

Cuando escribes:

 int *a; 

entonces a es un puntero , pero actualmente no apunta a ningún lado.

Debe hacer que apunte al almacenamiento válido para un int , antes de suministrarlo a fscanf .

Por ejemplo, dentro de main() :

 int b; a = &b; fscanf(input,"%d\n",a); 

Además, su bucle está mal. Casi siempre es un error usar feof (y mucho menos, como una condición de bucle). En su lugar, debe probar la operación de lectura real. En tu caso:

 while ( 1 == fscanf(input,"%d\n",a) ) { printf("%d\n", a); }