2016-04-13 32 views
12

我知道有一些字符值进行比较字符指针,当你需要与*前缀的指针,但我已经在一些代码中发现类似的比较炭末相比指针,我的问题是:这是一个错误还是特例?那里不应该有if (*c == '\0')用绳子

+5

错误的方式来检查NULL。 –

+2

是的,在这种情况下,解引用似乎是合乎逻辑的事情,所以这很可能是一个错误。 –

+14

这是一个错误。这有效地检查'c'是否为NULL,本来应该在'// ...'中完成。作者可能的意思是:if(* c =='\ 0')'作为一个检查来查看循环是否落在终结符上,而不是'']''。 – WhozCraig

回答

9

空指针

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

如果一个指针正在与常量文字0进行比较,那么这是一个检查指针是否为空指针。这个0然后被称为空指针常量。 C标准定义了将0转换为类型void *既是一个空指针也是一个空指针常量。

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

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

if (pointer == NULL)

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

if (pointer == 0)

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

NULL字符

'\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! 
} 
15

你说得对。

c == '\0' 

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