2015-09-10 2 views
6

Я получаю сообщение об ошибке, когда я перебираю указатель на символ и проверяю, когда указатель достигает нулевого терминатора.Предупреждение о сравнении между указателем и integer

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 "' представляет собой строку с двумя последовательными нулевыми байтами (поэтому вторая не может быть найдена с помощью строковых функций, таких как 'strlen()', потому что они останавливаются при первом нулевом байте). Пустая строка '' '' состоит из одного нулевого байта. –

ответ

22

Это должно быть

if (*message == '\0') 

В C, простые кавычки разграничить один символ, тогда как двойные кавычки для строк.

+0

О, так что двойные кавычки имеют значение? Спасибо, что могу успешно скомпилировать. – catee

+1

Я рад помочь. Предупреждение означает, что вы пытаетесь сравнить символ со строкой, следовательно, сообщение «сравнение между указателем (строкой) и целым (символом)». –

7

Это: "\0" - это строка, а не символ. Символ использует одинарные кавычки, например '\0'.

5

В этой строке ...

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

... как вы можете видеть в предупреждении ...

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

... вы на самом деле сравнени int с char *, или, более конкретно, int с адресом char.

Чтобы исправить это, используйте один из следующих способов:

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

На стороне записки, если вы хотите сравнить строки, вы должны использовать strcmp или strncmp, найденный в string.h.