2013-05-31 42 views
0

C字符串我有这样的代码:表示在存储和比较

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表示0根据ASCII在内存。

但是为什么在访问内存时我们使用HEX的数字并且为了比较我们使用DEC的数字?

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

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

而且据我所知"\48"等于0

+0

'但是为什么在访问内存时我们使用十六进制数字,并且为了比较我们使用了DEC数字?'谁说?任何示例? –

回答

2

你的循环包括出口检验

*p != "\0" 

这需要在charp的价值,它提升到int然后比较这对字符串字面"\0"的地址。我觉得你的意思来比较空字符'\0'代替

*p != '\0' 

关于对十六进制,十进制或八进制值进行比较 - 有没有一套规则,可以互换使用它们,但应尽量使用任何似乎使你的代码最容易阅读。人们经常使用十六进制以及按位操作或处理二进制数据。但请记住,'0'48,x30'\060'相同,但不同于'\0'

+0

是的,我的错误 –

+2

+1只要'* p!= 0'或甚至只是'* p'就足够了。 – WhozCraig

+0

好的,那么十六进制和十进制呢? –

2

是的,你可以比较像字符串的结尾:

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

char是0(零)

你可能只是这样做

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

由于@Whozraig也评论,因为*p\0而且ASCII值是0这是错误的