web-dev-qa-db-fra.com

Avertissement de comparaison entre pointeur et entier

Je reçois une erreur lorsque je parcours le pointeur du caractère et que je vérifie quand le pointeur atteint le terminateur nul.

 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
 }

L'erreur que je reçois est la suivante:

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

Je pensais que le * devant message message de déréférence, je reçois donc la valeur où le message pointe? Je ne veux pas utiliser la fonction de bibliothèque strcmp d'ailleurs.

15
catee

CA devrait etre

if (*message == '\0')

En C, les guillemets simples délimitent un seul caractère alors que les guillemets doubles concernent les chaînes.

37
Blake_Lead

Cette: "\0" est une chaîne, pas un caractère. Un caractère utilise des guillemets simples, comme '\0'.

9
dbush

Dans cette ligne ...

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

... comme vous pouvez le voir dans l'avertissement ...

 warning: comparaison entre pointeur et entier 
 ('int' et 'char *') 

... vous comparez en fait un int avec un char *, ou plus précisément un int avec une adresse à un char.

Pour résoudre ce problème, utilisez l'une des méthodes suivantes:

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

En passant, si vous souhaitez comparer des chaînes, vous devez utiliser strcmp ou strncmp, présent dans string.h.

5
Fiddling Bits