5

「test」と入力すると、この特定のコードが strstr() で false を返すのはなぜですか?

char input[100];

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

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

    }


}

strstr が最初のパラメーターで2番目のパラメーターのインスタンスを検索したと思いましたか? 入力をテキストに置き換えたり、直接何かを割り当てたりすると機能しますが、fgets では機能しないようです。

4

2 に答える 2

10

これは、fgets が改行文字を格納するため、strstr が比較を行うと失敗するためです。

マニュアルページから:

fgets() は、stream から最大で size 未満の 1 文字を読み取り、s が指すバッファーに格納します。EOF または改行の後、読み取りは停止します。改行が読み取られると、バッファに格納されます。'\0' は、バッファー内の最後の文字の後に格納されます。

于 2011-10-30T03:02:48.973 に答える
7

input[strlen(input) - 1] = '\0';の後に追加しfgetsます。fgets改行文字 ( '\n') を読み取ります。中にはないので'\n'、その中に含まれることはありません。"test message"input

fgets行全体が実際に改行に収まるかどうかを確認し、明らかに改行を削除するために、呼び出し後に改行がバッファーの最後にあるかどうかを実際に確認する必要があります。

于 2011-10-30T03:03:06.353 に答える