警告:指针和整数之间的比较

Asi*_*ati 0 c c++

我有一个功能:

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

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

    return i;
}
Run Code Online (Sandbox Code Playgroud)

我得到的警告是指针和整数之间的比较.你怎么解决它?

unw*_*ind 6

停止NULL作为一个字符处理,它应该是一个指针类型常量.

你的循环标题应该是:

for(t = s; *t != '\0'; ++t)
Run Code Online (Sandbox Code Playgroud)

这是编写它的"过于明确"的方式,一些旨在获得最大简洁性的C程序员只会说:

for(t = s; *t; ++t)
Run Code Online (Sandbox Code Playgroud)

由于'\0'比较与0的比较相同,这只是在评估表达式时隐含的.但是,我认为!= '\0'阅读的帮助因为它清楚地说明了发生了什么,我们正在寻找字符串终结符'\0'.任何理智的编译器都应该对这种比较进行简单的优化.