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

sop*_*sop 12 c c++ pointers

我知道在比较char指针和一些char值时你需要在指针前加上*,但我在一些代码中找到了一个比较:

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

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

小智 15

你是对的.

c == '\0'
Run Code Online (Sandbox Code Playgroud)

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


abh*_*ora 9

空指针

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

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

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

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

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!
}
Run Code Online (Sandbox Code Playgroud)