将指针与字符串的char结尾进行比较

时间:2016-04-13 07:58:37

标签: c++ c pointers

我知道在将char指针与某个char值进行比较时,需要在指针前添加*,但我在某些代码中找到了比较:

char* c;
// ... 
while (*c != ']' && *c != '\0') // search for some character 
{
    c++;
}
if (c == '\0')
{
    return -1; // error
}

所以,我的问题是:这是一个错误还是一个特例?那里不应该if (*c == '\0')吗?

2 个答案:

答案 0 :(得分:15)

你是对的。

c == '\0'

检查指针本身是否等于0,而不是指针指向的字符。

答案 1 :(得分:9)

空指针

整数常量字面值0具有不同的含义,具体取决于使用它的上下文。在所有情况下,它仍然是一个值为0的整数常量,它只是以不同的方式描述。

如果将指针与常量字面值0进行比较,则检查指针是否为空指针。然后将该0称为空指针常量。 C标准定义0转换为void *类型既是空指针又是空指针常量。

此外,为了提高可读性,头文件stddef.h中提供了宏NULL。

因此,这里有一些检查空指针的有效方法:

if (pointer == NULL)

NULL被定义为比较等于空指针。实现定义了NULL的实际定义,只要它是一个有效的空指针常量。

if (pointer == 0)

0是空指针常量的另一种表示。

空字符

'\0'被定义为空字符 - 这是一个所有位都设置为零的字符。这与指针无关。但是,您可能会看到与此代码类似的内容:

if (!*string_pointer)

检查字符串指针是否指向空字符

if (*string_pointer)

检查字符串指针是否指向非空字符。

  

所以,我的问题是:这是一个错误还是一个特例?不应该有(* c =='\ 0')吗?

代码if (c == '\0')中的语句检查指针本身是否等于0.也就是说,它检查c是否为空指针。 但我认为这是一个错误,因为检查c是NULL指针的语句是在访问存储在c的值之后。我认为该程序即将找到一个角色]。如果它在空字符之前找到字符],则它不返回-1。 因此,更正后的陈述应为 -

if (*c == '\0')
{
    return -1; // It didn't found the '[' character!
}