3

トークンで分割した 2 つの単語で構成されるファイルから文字列を読み取り、入力と比較したいと考えています。最初の比較は正常に機能しますが、2 番目の比較は機能しません。print ステートメントは同じことを出力しますが、チェックは失敗します。特殊な行末文字が原因だと思います。

if(strcmp(argv[2], token[0]) == 0){
    printf("Input1 match\n");
    printf("%s\n", argv[3]);
    printf("%s\n", token[1]);
    if(strcmp(argv[3], token[1]) == 0)
    {
        printf("Input2 match\n");
    }
}

編集:2番目のトークンに \n 文字があり、このコードを使用して文字列をトリミングすると修正されます

void strip(char *s) {
    char *p2 = s;
    while(*s != '\0') {
        if(*s != '\t' && *s != '\n') {
            *p2++ = *s++;
        } else {
            ++s;
        }
    }
    *p2 = '\0';
}
4

1 に答える 1

6

print ステートメントを次のように変更します。

printf("[%s]\n", argv[3]);
printf("[%s]\n", token[1]);

本当に同じかどうかを確認します。<space>またはなど、トークンの末尾に「隠れた」文字があることに気付くかもしれません\n

それでも表示されない場合は、16 進ダンプ プログラムを使用して出力をパイプできます (利用可能な(a)がある場合)。

./myprog | od -xcb

次に、疑わしい文字の出力を調べることができます。


(a) Windows を使用している場合、gVim のメニューに「16 進数に変換」が表示されるか、CygWin または GnuWin32 ツールをインストールしてod.

于 2013-04-29T01:04:18.950 に答える