web-dev-qa-db-ja.com

ポインターと整数の警告比較

文字ポインターを反復処理し、ポインターがヌルターミネーターに到達したことを確認すると、エラーが発生します。

 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の前にあるため、メッセージを逆参照するので、messageが指す場所の値を取得できますか?ところで、ライブラリ関数strcmpを使いたくありません。

15
catee

そのはず

if (*message == '\0')

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

37
Blake_Lead

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

9
dbush

この行では...

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

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

警告:ポインターと整数の比較
( 'int'と 'char *')

...実際にintchar *と比較しています。具体的には、intcharへのアドレスを比較しています。

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

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

補足説明として、文字列を比較する場合は、string.hにあるstrcmpまたはstrncmpを使用する必要があります。

5
Fiddling Bits