2012-05-24 72 views
1

大家好, 我是一個新手,我在做一個代碼,主要目的是打印一個數字,如果兩個字符串相等。第一個字符串從文件中獲得,第二個字符串是要比較的字符串。strcmp()沒有比較

代碼:

int main() 
{ 
char *string[2]; 
FILE *stream; 
stream = fopen("REL","r"); 
if((stream = fopen("REL","r")) == NULL) 
{ 
    printf("Can't open %s\n","REL"); 
    exit(1); 
} 
for(int i=0;i<92;i++) 
{ 
    fscanf(stream,"%s",&string); 
    if(strcmp("20", *string) == 0) 
    { 
     printf("%d",20); 
    } 
} 
fclose(stream); 
} 

和......當我在外殼測試,它promp對我說:

~/CM$ ./file2 
Segmentation fault (core dumped) 

我可能會做一個愚蠢的錯誤。但作爲一個新手,我無法弄清楚劇本出了什麼問題。

回答

3

string是2 char*的單位陣列。 fscanf正試圖寫入內存不應該。聲明string作爲字符數組:

char string[256]; 

和:

fscanf(stream, "%255s", string); /* Limit number of 
            chars read to prevent buffer overrun. */ 
+0

:d:d:d: D .......最後我可以前進!!!!!!謝謝@hmjd !!!! –

1

嘗試這種情況:

char string[128]; 
fscanf(stream, "%s", string); 

然後:

if (!strcmp("20", string)) { 
    /* The strings are equals */ 
} 
+0

謝謝@enrmarc解決了,你也是對的! –