2016-05-17 4 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(). Например: Пользователь пишет «Слово». Так слово [0] является 'W' слово [1] 'о', и т.д.

char *ret; 
char buff[200]; 

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


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

В чем проблема? Это то же самое, но это не работает.

+3

так, вы читаете 300 символов в 200 массив символов, не так ли? –

+2

и что такое '' '? –

+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, которые должны быть инициализированы NULL перед циклом

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

Также примите во внимание, что Buff имеет только 200 символов

char buff[200]; 

но вы пытаетесь прочитать 300 символов

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

Было бы лучше просто написать

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

Это (strchr) работает, спасибо человеку. –

+0

@ GáborMicskó Нет вообще. :) –

Смежные вопросы