1

2つの文字列を比較したい:

最初の文字列は私のメインの上で宣言されています:

char _newState[] = "AVAILABLE";

const文字列と比較したい場合は、次の行を入力します。

if(strcmppgm2ram((const char *) "AVAILABLE", _newState ) == 0){
    code:
}

関数がゼロを返すことはありません。解決策と正しい型キャストは何ですか?strcmpも同じ問題です!

4

2 に答える 2

6

パラメータの順序が間違っているようです。C18ライブラリマニュアルによると、署名strcmppgm2ram

signed char strcmppgm2ram(const char * str1, const rom char * str2 );

したがって、文字列定数は 2 番目の文字列であり、文字配列は最初のパラメーターである必要があります。

キャストはこのような問題を隠すだけなので、使用しないでください。タイプの不一致がある場合は、その情報を使用して、正しいタイプが何であるか、および間違いを犯したかどうかを判断する必要があります。キャストを使用することは、コンパイラが警告/エラーであると考えていても、実行したことを無視するようにコンパイラに指示するようなものです。

于 2012-06-19T14:30:33.690 に答える
2

試す:

const far rom char _newState[] = "AVAILABLE";

今後の参考のために、コンパイラの警告を無視しないことをお勧めします。警告は役に立つものです。

于 2012-06-19T14:29:56.703 に答える