2016-05-17 82 views
-8

我遇到問題。工作的strstr這種方式:無法運行strstr

char *ret; 
char buff[200]; 

while(fgets(buff, 300, fp)) { 

    //printf("%s", buff); 

    if(ret = strstr(buff, "E")) break; 
    } 
    printf("%s", ret); 

但是,它給了我一個分段錯誤是這樣的:

我讀了用戶的輸入與函數getline()。 例如:用戶寫入「Word」。所以字[0]是'W'字[1]是'o'等。

char *ret; 
char buff[200]; 

    while(fgets(buff, 300, fp)) { 


      if(ret = strstr(buff, s[0])) break; 
      } 
      printf("%s", ret); 

問題是什麼?它是一樣的,但它不工作..

+3

所以,你讀了300個標誌爲200的符號陣列,對不對? –

+2

什麼是's'? –

+0

用戶輸入..... –

回答

0

看來,s[0]有型號char。如果是這樣,您需要使用strchr而不是strstr

if ((ret = strchr(buff, s[0]))) break; 

或者如果你想使用strstr那麼你可以將它與複合文字結合起來。例如

if ((ret = strstr(buff, (char[]) { s[0], '\0' }))) break; 

而且在循環之後你應該檢查ret應該循環

if (ret) printf("%s", ret); 

之前被初始化爲NULL還考慮到,愛好者帳戶只有200個字符

char buff[200]; 

但您正嘗試讀取300個字符

while(fgets(buff, 300, fp)) { 

這將是更好只是寫

while(fgets(buff, sizeof(buff), fp)) { 
+0

這(strchr)的作品,謝謝你。 –

+0

@GáborMicskó完全沒有。:) –