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

Comparing pointer with char end of string

本文关键字:结尾 字符 比较 字符串 指针      更新时间:2023-10-16

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

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

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

你说得对。

c == ''

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

空指针

整数常量文字0根据其使用的上下文具有不同的含义。在所有情况下,它仍然是一个值为0的整数常数,只是以不同的方式进行了描述。

如果将指针与常量文字0进行比较,则这是一次检查,以查看该指针是否为空指针。该0随后被称为空指针常量。C标准定义了转换为类型void*的0既是空指针又是空指针常量。

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

因此,以下是一些检查空指针的有效方法:

if (pointer == NULL)

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

if (pointer == 0)

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

空字符

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

if (!*string_pointer)

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

if (*string_pointer)

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

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

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

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