2013-04-21 6 views
3

По некоторым причинам, я получаю сообщение об ошибке на этой линии:Несовместимое целое число с ошибками преобразования указателя?

while ((en = strtok(NULL, " ") !=NULL)){ //do something } 

и на этой линии (погрешность для этого есть «сравнение между указателем и целым (» междом»и„недействительным *“) , даже если inputString является массив символов и нуль равно нулю.

while (!inputString[i]==NULL) 

еп голец, и был объявлен в символьном * эн. Я не знаю, почему ... это потому, что я не могу сравнить их с NULL?

ответ

13

Проблема не в сравнении - это назначение. != имеет более высокий приоритет, чем =, поэтому ваше выражение обрабатывается как:

en = (strtok(NULL, "") != NULL) 

предположительно en является тип указателя, и результат != является int, так что это, где возникает предупреждение. Вы, вероятно, имели в виду:

(en = strtok(NULL, "")) != NULL 

как состояние. То же самое верно и во втором примере: ! имеет более высокий приоритет, чем ==, поэтому вы сравниваете результат !inputString[i] (который имеет тип int) до NULL (который может иметь тип void *). Вы можете иметь в виду:

while (!(inputString[i] == NULL)) 

, который также может быть записана в виде:

while (inputString[i] != NULL) 

или просто

while (inputString[i]) 
Смежные вопросы