Возможно, потому что fgets
также будет читать новую строку, т.е. '\n'
.Более подробно:
Если вы наберете Girl<enter>
, тогда search_for
будет содержать символы: 'G' 'i' 'r' 'l'
'\n'
Однако ваш tracks
содержит только 'G' 'i' 'r' 'l'
без '\n'
.
Следовательно, вы не найдете подходящей подстроки.
Попробуйте изменить:
fgets(search_for, MAX, stdin);
на
fgets(search_for, MAX, stdin);
if (strlen(search_for) > 0) search_for[strlen(search_for)-1] = '\0';
, чтобы удалить завершающий символ новой строки
Редактирование на основе комментариев
Это правда, что (в зависимости от вашей ОС / среды) поток ввода может быть завершен без перевода строки (ctrl-z, ctrl-d на некоторыхсистемы).Если это сделано, приведенный выше код недостаточен.Требуется дополнительная проверка, например:
if (strlen(search_for) > 0 && search_for[strlen(search_for)-1] == '\n')
search_for[strlen(search_for)-1] = '\0';
, чтобы убедиться, что только символ перевода строки преобразуется в завершение строки.