我有这样的代码:
char str1[100] = "Hel0lo";
char *p;
for (p = str1; *p != 0; p++) {
cout << *p << endl;
/* skip along till the end */
}
并且有些部分对我来说并不清楚。
我知道内存中以空字符结尾的字符串是字节,所有位都等于0(ASCII)。这就是为什么当*p != 0
我们决定找到字符串的结尾时。如果我想搜索到零字符,我应该与48进行比较,根据内存中的ASCII,DEC
表示为0。
但为什么在访问内存时我们使用HEX
个数字并进行比较,我们使用DEC
个数字?
是否可以将"\0"
作为字符串的结尾进行比较?像这样(不工作):
for (p = str1; *p != "\0"; p++) {
据我所知,"\48"
等于0
?
答案 0 :(得分:2)
你的循环包括退出测试
*p != "\0"
这会获取char
p
的值,将其提升为int
,然后将其与字符串文字"\0"
的地址进行比较。我认为你的意思是与nul字符'\0'
进行比较而不是
*p != '\0'
关于与十六进制,十进制或八进制值的比较 - 没有设置规则,您可以互换使用它们,但应该尝试使用似乎使您的代码最容易阅读的任何内容。人们经常使用十六进制和按位操作或处理二进制数据。但请注意,'0'
与48
,x30
和'\060'
相同,但与'\0'
不同。
答案 1 :(得分:2)
是的,您可以比较字符串的结尾,如:
for (p = str1; *p != '\0'; p++) {
// your code
}
\0
char的ASCII值为0(零)
你可以做到
for (p = str1; *p ; p++) {
// your code
}
正如@Whozraig也评论过,因为*p
是\0
而ASCII值是0
是假的