5

xmlファイルをchar[]に読み込み、その配列内の各要素を「<」や「>」などの特定の文字と比較しようとしています。char配列"test"は、1つの要素の配列であり、比較する文字が含まれています(このように実行する必要があります。そうしないと、charからcons char *への変換でエラーが発生します)。しかし、何かがおかしいのでわかりません。これが私が得ているものです:
<は比較されています:<strcmp値:44

何が起こっているのか分かりますか?

char test[1];   
for (int i=0; i<amountRead; ++i)
{
    test[0] = str[i];
    if( strcmp(test, "<") == 0)
        cout<<"They are equal"<<endl;
    else
    {
        cout<<test[0]<< " is being compare to: "<<str[i]<<" strcmp value= "<<strcmp(test, "<") <<endl;
    }

}
4

3 に答える 3

4

strcmp()は、両方のパラメーターが単純な文字ではなく、null で終了する文字列であると想定しています。文字が等しいかどうかを比較する場合は、関数を呼び出す必要はなく、文字を比較するだけです。

if (test[0] == '<') ...
于 2010-02-07T06:16:39.817 に答える
2

テスト文字列を 0 で終了する必要があります。

char test[2];   
for (int i=0; i<amountRead; ++i)
{
    test[0] = str[i];
    test[1] = '\0'; //you could do this before the loop instead.
    ...

ただし、常に一度に 1 文字ずつ比較する場合は、一時バッファーはまったく必要ありません。代わりにこれを行うことができます

for (int i=0; i<amountRead; ++i)
{
    if (str[i] == "<")
       cout<<"They are equal"<<endl;
    else
    {
        cout << str[i] << " is being compare to: <" << endl;
    }
}
于 2010-02-07T06:13:09.043 に答える
1

strcmp は、両方の文字列を 0 で終了させたいと考えています。

0 以外で終了する文字列がある場合は、strncmpを使用します。

if( strncmp(test, "<", 1) == 0 )

両方の文字列が少なくとも N 文字の長さであることを確認するのはユーザー次第です (N は 3 番目のパラメーターの値です)。strncmp は、メンタル ツールキットに含めるのに適した関数です。

于 2010-02-07T06:34:11.330 に答える