fscanf返回(null)

时间:2011-08-27 13:56:30

标签: c scanf

运行以下代码时:

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 个答案:

答案 0 :(得分:3)

您需要使用malloc或

初始化name和stat
char name[LENGTH];

如果你只是写

char *name;

它不起作用

答案 1 :(得分:0)

namestat不得为NULL ...您必须初始化它们 - 将它们直接定义为char name [LENGTH]等数组...

答案 2 :(得分:-1)

我运行你的代码并且有效。

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