0

我有这样的代码:

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 进行比较,它是DEC根据 ASCII 在内存中的 0 表示。

但是为什么在访问内存时我们使用HEX数字,而为了比较我们使用DEC数字呢?

是否可以比较"\0"为字符串的结尾?像这样的东西(不工作):

for (p = str1; *p != "\0"; p++) {

据我了解"\48"等于0

4

2 回答 2

2

您的循环包括退出测试

*p != "\0"

这将获取 的值,将其char p提升为,int然后将其与字符串文字的地址进行比较"\0"。我认为您的意思是与 nul 字符进行'\0'比较

*p != '\0'

关于与十六进制、十进制或八进制值的比较 - 没有固定规则,您可以互换使用它们,但应该尝试使用任何看起来使您的代码最容易阅读的东西。人们经常将十六进制与按位运算一起使用或在处理二进制数据时使用。但是请记住,这'0'与 相同48,但x30'\060'不同'\0'

于 2013-05-31T10:43:56.713 回答
2

是的,您可以比较字符串的结尾,例如:

for (p = str1; *p != '\0'; p++) {
        // your code 
}

char 的ASCII 值为\00(零)

你可以做

for (p = str1; *p ; p++) {
        // your code 
}

正如@Whozraig 也评论的那样,因为*pis\0和 ASCII value is 0that is false

于 2013-05-31T10:45:32.200 回答