运行以下代码时:
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
你能告诉我这里我做错了吗?
答案 0 :(得分:3)
您需要使用malloc或
初始化name和statchar name[LENGTH];
如果你只是写
char *name;
它不起作用
答案 1 :(得分:0)
name
和stat
不得为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);