读书人

关于字符数组的有关问题

发布时间: 2012-04-02 19:58:59 作者: rapoo

关于字符数组的问题
当定义char sp[]= "\x69\082\n "时
printf( "%d ",strlen(sp));的结果是1
可是当char sp[]= "\x69\072\n ";时
结果是3.
为什么第一句话里面\0是结束符,可是在第二句话里面不是呢?

[解决办法]
当定义char sp[]="\x69\082\n"时 数组sp共占6个字节.
\x69 \0 8 2 \n \0

这里的第一个问题是8进制数所能使用的最大数是7,所以就像1楼兄弟说的那样此时\0会单独成为一个字符.用strlen函数求sp长度时在第2个字节中先遇到\0所以strlen函数就会当作该字符串已结束.在strlen眼里此时sp是由两个字节的内容组成\x69 与 \0.且因为strlen函数并不把\0计算成字符串的长度.所以得出该值为1.

可是当char sp[]="\x69\072\n";时 数组中的内容共占4个字节.

\x69 \072 \n \0

同上面的理由因为strlen函数并不把\0计算在字符长度内,所以该strlen值为3...

读书人网 >C++

热点推荐