2011-08-27 46 views
0

當運行以下代碼:的fscanf返回(空)

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

你能告訴我我在這裏做錯了嗎?

+1

你能告訴我們這些變量的類型? – Cedekasme

+1

您是否在讀取之前初始化名稱和屬性? – Alex

回答

0

namestat絕不能NULL ...你必須初始化它們 - 通過直接將它們定義爲像char name [LENGTH]這樣的數組...

3

您需要用用的malloc或

char name[LENGTH]; 

來初始化名稱和統計,如果你只是寫

char *name; 

這是行不通的

+1

感謝,現在的工作:) –

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

' 「%[^ \ n]的 」'是壞的,它必須是'上 – user411313

+0

@ user411313「 199%[^ \ n]」'等等,我可以問爲什麼「% [^ \ n] s「不好? – Rupak

+0

緩衝區溢出......除非你告訴'scanf()的'家庭例程有多大的最大字符串大小,它們很容易受到緩衝區溢出。 –