请问 C++中strlen()用法

2024-12-16 23:35:39
推荐回答(5个)
回答1:

楼上GhostWzf和rianj均为正解,这里补充一下

--------------------

需要明确的第一点,strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值。

例如以下代码片断理论上也是可以编译通过的:
char str[]="abcdefg";
printf("%d\n",strlen(&str[5]));

结果应当为2。
该例中,strlen从字符str[5]即'f'开始计数,当到达'g'之后遇到'\0'并停止计数。因此结果为2。

针对你提出的问题,相关补充如下:
-----------------

str0被声明为8个单元的字符数组,而通常情况下,我们需要这样对其进行初始化:
char str0[8]={'a','b','c','d','e','f','g'};
str0[7]='\0';
其中第二行也可以写成 str0[7]=0; 或者 str0[7]=NULL (针对部分编译器,第二行也可以省略不写,但是不推荐这么做。)

而str1被声明为一个字符串,在字符串初始化时,编译器将自动为其尾端添加终结符'\0'。

-------------------

str2和str3的主要区别就在于C/C++字符串中,允许形如“\056”这样的所谓转义字符存在,它们仅表示一个字节位(byte),一般用于输出无法直接通过键盘输入的字符。

具体内容请参考相关教材。

回答2:

str0 没有 '\0' strlen()以'\0'判断字符串结束

str2 里面那个不是'\0'而是'\056' 所以一样不能作为字符串结束标志

回答3:

我只知道你那个\056被当做一个字符来处理了,然后你那个str0我也感到很奇怪,如果是9然后加个h的话又变成了15,但是你要给他留个位子,让他补零就好了,楼上的高手的答案蛮好的,其实你用c++的话就没有必要再用char了,我们老师的一句话我觉得很有道理,变成将就应用,而不是去高些自己都觉得麻烦的东西,能够用些好用的东西去解决问题就行了,当然你的探索精神自然是值得赞赏的!

回答4:

数组str0中没有'\0',strlen是以'\0'为标志判断字符串结束的。

回答5:

str0的sizeof为8,导致没有\0结束,因此strlen的返回是不可预期的。
str1的sizeof实际上是9,会自动加\0结束。
str2的\056会被解释成8进制数056表示的字符,因此strlen是9
str3的\0会被解释为结束符