2013-11-26 2 views
0

У меня есть функция, как:Предупреждения: сравнение между указателем и целым

char * s; 
{ 
    char * i = s, * t; 

    for(t = s;*t != NULL;t++) 
     if (*t == '/') i = t+1; 

    return i; 
} 

Предупреждение я получаю это сравнение между указателем и целым. Как U разрешить это?

+3

Вместо '* t! = NULL' вы должны иметь' * t! = '\ 0''. –

+0

должен сказать: я никогда не видел функцию, объявленную таким образом. Это синтаксис c? – smac89

+0

@ Smac89 Это не объявление функции, а легальный синтаксис C, '{}' создать блок. –

ответ

6

Остановить обработку NULL как символ, он должен быть константой типа указателя.

Ваш заголовок цикл должен быть:

for(t = s; *t != '\0'; ++t) 

Это «слишком откровенные» способ написания этого, некоторые программисты C, направленные на максимальную краткость будет просто сказать:

for(t = s; *t; ++t) 

Поскольку сравнение до '\0' - это то же самое, что и сравнение с 0, что подразумевается при простом вычислении выражения. Тем не менее, я думаю, что != '\0' помогает в чтении, так как он дает понять, что происходит, мы ищем строковый ограничитель '\0'. Сравнение должно быть тривиально оптимизировано любым компилятором.

Смежные вопросы