23

文字ポインタを反復処理し、ポインタがヌル ターミネータに到達するタイミングを確認すると、警告が表示されます。

 const char* message = "hi";

 //I then loop through the message and I get an error in the below if statement.

 if (*message == "\0") {
  ...//do something
 }

私が得ているエラーは次のとおりです。

warning: comparison between pointer and integer
      ('int' and 'char *')

*逆参照メッセージの前にあると思ったmessageので、メッセージが指す場所の値を取得しますか? strcmpちなみにライブラリ機能は使いたくないです。

4

3 に答える 3

59

そのはず

if (*message == '\0')

C では、単純な引用符は単一の文字を区切りますが、二重引用符は文字列用です。

于 2015-09-10T19:35:05.487 に答える
9

これは:"\0"文字ではなく文字列です。文字は、のように一重引用符を使用します'\0'

于 2015-09-10T19:36:52.467 に答える
7

この行で...

if (*message == "\0") {

...警告でわかるように...

警告: ポインタと整数の比較
      (「int」および「char *」)

...実際には と を比較してintいます。char *より具体的には、intと アドレスを と比較していcharます。

これを修正するには、次のいずれかを使用します。

if(*message == '\0') ...
if(message[0] == '\0') ...
if(!*message) ...

余談ですが、文字列を比較したい場合は、 または を使用する必要がありstrcmpます。strncmpstring.h

于 2015-09-10T19:49:20.533 に答える