2015-12-06 6 views
-2

Я работаю над программой, где мне хотелось бы найти совпадение в строке. Я использую функцию strstr(), чтобы выполнить эту работу, но у нее странное поведение. Я использую fgets(), чтобы прочитать строку, а затем используя strstr(), чтобы найти совпадение, но всегда возвращает значение null, если строка не совпадает с совпадением.strstr() всегда возвращает null

Например:

>string to search match in : This is testing environment 
>match : test 
>returns : (null) 

>string to search match in : test 
>match : test 
>returns : test 

Почему ведут себя таким образом, и я могу исправить это поведение?

+3

Как вы звоните 'strstr'? Можем ли мы увидеть код? – Kevin

+2

Пожалуйста, найдите время [страницы справки] (http://stackoverflow.com/help), особенно разделы с именем [«Какие темы можно задать здесь?»] (Http://stackoverflow.com/help/on-topic) и [«Какие типы вопросов я должен избегать?»] (http://stackoverflow.com/help/dont-ask). Также, пожалуйста, [прочитайте о том, как задавать хорошие вопросы] (http://stackoverflow.com/help/how-to-ask). Вы также можете узнать, как создать [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). –

+2

Вы знаете, что «строки», читаемые через 'fgets()' обычно содержат конечную новую строку, используемую для их ввода? – alk

ответ

1

Используйте следующий подход

char *p = strchr(match, '\n'); 
if (p) *p = '\0'; 

p = strstr(source, match); 
+1

Или просто выполните 'match [strcspn (match," \ n \ r ")] = '\ 0'; 'отрезать любую последующую новую строку. – alk

+0

Поскольку новая линия всегда будет в конце, и обычный случай, что он будет там (новая строка не является исключительным случаем), почему бы не использовать 'strrchr'? Или просто проверить последний символ? :) –

+0

@JoachimPileborg Зачем искать последнее появление нового символа линии, а не искать первое вхождение? :) –

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