2015-09-10 10 views
6

Ich bekomme einen Fehler, wenn ich durch den Zeichenzeiger iteriere und überprüfe, wenn der Zeiger den Nullabschluss erreicht.Warnung Vergleich zwischen Zeiger und Ganzzahl

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 
} 

Der Fehler Ich erhalte ist:

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

Ich dachte, dass die * vor message Dereferenzierungen Nachricht, so dass ich den Wert von dem Nachrichten-Punkte? Ich möchte übrigens nicht die Bibliotheksfunktion strcmp verwenden.

+1

Beachten Sie, dass '" \ 0 "' eine Zeichenfolge mit zwei aufeinanderfolgenden Nullbytes ist (die zweite kann also nicht gefunden werden, indem Funktionen wie 'strlen()' manipuliert werden, weil sie beim ersten Nullbyte anhalten). Die leere Zeichenfolge "" besteht aus einem einzelnen Nullbyte. –

Antwort

22

Es sollte

if (*message == '\0') 

In C begrenzen einfache Anführungszeichen ein einzelnes Zeichen, während doppelte Anführungszeichen für Strings sind.

+0

Oh, also machen die doppelten Anführungszeichen den Unterschied? Danke, ich kann jetzt erfolgreich kompilieren. – catee

+1

Ich bin glücklich zu helfen. Die Warnung bedeutet, dass Sie versuchen, ein Zeichen mit einer Zeichenfolge zu vergleichen, daher die Nachricht "Vergleich zwischen Zeiger (Zeichenfolge) und Ganzzahl (Zeichen)". –

7

Dies ist: "\0" ist eine Zeichenfolge, kein Zeichen. Ein Zeichen verwendet einfache Anführungszeichen wie '\0'.

5

In dieser Zeile ...

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

... wie Sie in der Warnung ...

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

... Sie vergleichen mit einem char * ein int tatsächlich sehen können, oder genauer gesagt eine int mit einer Adresse zu einer char.

Um dies zu beheben, verwenden Sie eine der folgenden Möglichkeiten:

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

Auf einer Seite beachten, wenn Sie sollten Sie in string.hstrcmp oder strncmp, verwenden Sie möchten, dass Zeichenketten vergleichen.

Verwandte Themen