首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

字符串的长度如何会这样呢

2012-02-28 
字符串的长度怎么会这样呢?intmain(){char*strintlength,nstrnewchar[7]lengthstrlen(str)cout l

字符串的长度怎么会这样呢?
int   main()
{
char   *str;
int   length,n;
str   =   new   char[7];
                  length=strlen(str);
cout < <length < <endl;
cin> > str> > n;
cout < <str < < "\t " < <n < <endl;
length=strlen(str);
cout < <length < <endl;
delete[]   str;
return   0;
}
运行结果
11
add   4
add   4
3
问题:str未被赋值时,它的长度为什么会是11呢,明明new的是一个7的数组阿?
赋值后,长度又变正确了!

[解决办法]
The strlen() 返回的长度 determined by the number of characters before null termination.
str未被赋值时,the number of characters 应该是个不确定的数吧...


[解决办法]
strlen函数是根据‘\0’来判断尾巴的,而你new之后,此时在内存中的东西是乱码符号,因此strlen从开始位置找啊找,找到一个 '\0 ',然后把从开始位置到这里的大小返回给你,当然就是不确定的一个值了。

[解决办法]
问题:str未被赋值时,它的长度为什么会是11呢,明明new的是一个7的数组阿?
赋值后,长度又变正确了!


int main()
{
char *str;
int length,n;
str = new char[7]; //分配了七个字节,但并没有赋值,也就是说,这里面是什么都
length=strlen(str); //有可能,当然也有可能是 '\0 ',但是strlen是遇到 '\0 '才为
cout < <length < <endl; //止的,所以当你strlen它的时候,它的 '\0 '说不定在哪里,因
cin> > str> > n; //此它的长度应该是不确定的
cout < <str < < "\t " < <n < <endl; //输入一个str之后,这个字符串尾部的 '\0 '加到了str
length=strlen(str); //数组里面.当然这时在strlen(str)就是计数到那输入的三个
cout < <length < <endl; //字节为止了
delete[] str;
return 0;
}

[解决办法]
楼主可以找找strlen的源码看一下,
一看就明白了,
它找的是 '\0 ',
因为它并没其它办法知道数组的长度

热点排行