fscanf devuelve (nulo)

Al ejecutar el siguiente código:

FILE *input;
char *name=NULL,*stat=NULL;
int i=0,j=0;
input=fopen("/proc/1/stat","r");
fscanf(input,"%d",&i);
fscanf(input,"%s",name);
fscanf(input,"%s",stat);
fscanf(input,"%d",&j);
printf("pid : %d name: %s status: %s ppid: %d",i,name,stat,j);

Obtengo la salida:

pid : 1 name: (null) status: (null) ppid: 0

El contenido de / proc / 1 / stat es

1 (inicio) S 0

¿Puedes decirme qué hice mal aquí?

preguntado el 27 de agosto de 11 a las 13:08

¿Puede mostrarnos el tipo de estas variables? -

¿Inicializó el nombre y la estadística antes de leer? -

3 Respuestas

Debe inicializar tanto el nombre como la estadística con un malloc o

char name[LENGTH];

si solo escribes

char *name;

No funcionaria

Respondido 27 ago 11, 18:08

name y stat NO debe ser NULL ... debe inicializarlos, definiéndolos directamente como una matriz como char name [LENGTH]...

Respondido 27 ago 11, 18:08

Ejecuto tu código y funciona.

FILE *input;
input = fopen("stat","r");

int i, j;
char name[100], stat[100];

fscanf(input,"%d", &i);
fscanf(input," %s", name);
fscanf(input," %s", stat);
fscanf(input," %d", &j);
printf("pid : %d name: %s status: %s ppid: %d", i, name, stat, j);

Si se enfrenta a algún tipo de problema de búfer, puede intentar el siguiente código ...

int i, j;
char name[100], stat[100], temp[200];

fscanf(input, " %[^\n]s", temp);
sscanf(temp, "%d %s %s %d", &i, name, stat, &j);
printf("pid : %d name: %s status: %s ppid: %d\n", i, name, stat, j);

Respondido 27 ago 11, 18:08

" %[^\n]s"es malo, debe ser "%199[^\n]" y así - user411313

@ user411313, ¿puedo preguntar por qué "% [^ \ n] s" es malo? - Rupak

Desbordamiento de búfer ... a menos que le digas al scanf() familia de rutinas cuán grandes son los tamaños máximos de cadena, son vulnerables al desbordamiento del búfer. - Jonathan Leffler

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.