strstr не работает - PullRequest
       45

strstr не работает

5 голосов
/ 30 октября 2011

Почему этот конкретный фрагмент кода возвращает false в strstr (), если я ввожу "test"?

char input[100];

int main()
{
    fgets(input, 100, stdin);
    printf("%s", input);

    if(strstr("test message", input))
    {
        printf("strstr true");

    }


}

Я думал, что strstr искал первый параметр для поиска экземпляров второго параметра?Это работает, когда я заменяю ввод каким-либо текстом или просто назначаю ему что-то напрямую, но, похоже, не работает с fgets.

Ответы [ 2 ]

10 голосов
/ 30 октября 2011

Это потому, что fgets хранит символ новой строки, поэтому, когда strstr выполняет сравнение, он не работает.

Со страницы man:

fgets () читает не более чем на один размер меньшесимволы из потока и сохраняет их в буфер, на который указывает s.Чтение останавливается после EOF или новой строки.Если читается новая строка, она сохраняется в буфере.'\ 0' сохраняется после последнего символа в буфере.

7 голосов
/ 30 октября 2011

Добавьте input[strlen(input) - 1] = '\0'; после fgets. fgets читает в символе перевода строки ('\n'). В "test message" нет '\n', поэтому в нем никогда не будет input.

Вы должны действительно проверить, находится ли символ новой строки в конце буфера после вызова fgets, чтобы узнать, действительно ли вся строка могла в него поместиться, а также, очевидно, удалить его.

...