fscanf возвращает (ноль) - PullRequest
       1

fscanf возвращает (ноль)

0 голосов
/ 27 августа 2011

При запуске следующего кода:

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);

я получаю вывод:

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

Содержимое / proc / 1 / stat равно

1 (init) S 0

Подскажите, пожалуйста, что я здесь не так сделал?

Ответы [ 3 ]

3 голосов
/ 27 августа 2011

Вам нужно инициализировать и имя, и статистику либо с помощью malloc, либо

char name[LENGTH];

, если вы просто напишите

char *name;

Это не будет работать

0 голосов
/ 27 августа 2011

Я запускаю твой код, и он работает.

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);

Если вы столкнулись с некоторыми проблемами с буфером, попробуйте следующий код ...

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);
0 голосов
/ 27 августа 2011

name и stat не должны быть равны NULL ... вы должны инициализировать их - определяя их непосредственно как массив типа char name [LENGTH] ...

...