我知道有一些字符值进行比较字符指针,当你需要与*
前缀的指针,但我已经在一些代码中发现类似的比较炭末相比指针,我的问题是:这是一个错误还是特例?那里不应该有if (*c == '\0')
?用绳子
Q
用绳子
12
A
回答
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,而不是指针指向的字符。
相关问题
- 1. 使用绳子
- 2. 用绳子
- 3. 用绳子
- 4. 用绳子
- 5. 用绳子
- 6. 用绳子
- 7. 用绳子
- 8. 用绳子
- 9. 用绳子
- 10. 用绳子
- 11. 用绳子
- 12. 用绳子在J2ME
- 13. 用绳子部分
- 14. 如何用绳子
- 15. 潘岳:用绳子
- 16. 需要用绳子
- 17. 印刷用绳子
- 18. 如何用绳子
- 19. 如何用绳子
- 20. 如何用绳子
- 21. 使用.format用绳子dictonary
- 22. 上的绳子
- 23. 字符串或用绳子
- 24. 删除文件用绳子
- 25. 药剂:印刷用绳子
- 26. 做数学用绳子
- 27. 仰望引号用绳子
- 28. C++新手就用绳子
- 29. SQL语法用绳子
- 30. 的fscanf用绳子和长
错误的方式来检查NULL。 –
是的,在这种情况下,解引用似乎是合乎逻辑的事情,所以这很可能是一个错误。 –
这是一个错误。这有效地检查'c'是否为NULL,本来应该在'// ...'中完成。作者可能的意思是:if(* c =='\ 0')'作为一个检查来查看循环是否落在终结符上,而不是'']''。 – WhozCraig