2015-09-10 15 views
6

文字ポインタを繰り返し処理し、ポインタがヌルターミネータに達したときにエラーが発生します。ポインタと整数の警告比較

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を途中で使用したくない。

+1

'' \ 0 "'は2つの連続したヌルバイトを持つ文字列であるため、 'strlen()'のような関数を扱う文字列では2番目のヌルバイトが見つからないため、空文字列 '' ''は1つのNULLバイトで構成されます。 –

答えて

22

それはCで

if (*message == '\0') 

である必要があり、二重引用符は文字列のためのものであるのに対し、簡単な引用符は、単一の文字を区切ります。

+0

ああ、二重引用符で違いがありますか?ありがとう、私は今正常にコンパイルすることができます。 – catee

+1

私はお手伝いします。警告は、文字を文字列と比較しようとしていることを意味します。つまり、「ポインタ(文字列)と整数(文字)の比較」メッセージです。 –

7

これは:"\0"は文字ではなく文字列です。文字は一重引用符を使用します('\0'など)。この行で

5

...

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

...あなたは警告で見ることができるように...

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

...あなたが実際に、char *intを比較します具体的には、アドレスがcharintです。

は、この問題を解決する、次のいずれかを使用します。

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

をサイドノートでは、あなたは文字列を比較したい場合は、string.hで見つかったstrcmpまたはstrncmpを、使用する必要があります。

関連する問題