C++字符串长度问题

来源:百度知道 编辑:UC知道 时间:2024/05/01 02:24:21
#include<iostream.h>
#include<string.h>
void main(void)
{
char s[]={'i','a','m','a','s','t','u','d','e','n','t'};
cout<<strlen(s)<<endl;
cout<<s<<endl;
}
输出长度为什么是15?不是11?还有输出数组为什么有乱码?而加个零就没有呢?

是因为你初始化时没有加结束字符'\0'
char s[]={'i','a','m','a','s','t','u','d','e','n','t','\0'};
因此如果你采取如下方式定义时,必须在原来的基础上多分配一个字节的空间放'\0'。 char s[3]={'n','i','\0'}

如果你不加结束符,输出的长度就会不定,因为求长度的原理是从字符串首地址开始寻找,直到找到字节的值为0(即'\0'的ASCII码)时结束,然后把末地址减初地址,得到的值极为长度。而你在字符串初始化时没加结束符,它会一直往下找,这时就决定你的内存从字符串的首地址开始,后面哪个字节的值是0,当然strlen()的值一定会>11.
至于乱码跟上面的原因一样,因为它把内存中后面字节里面存的值也转化为字符输出来。

因为初始化的时候没有 加字符串结束符\0。
char s[]={'i','a','m','a','s','t','u','d','e','n','t','\0'};
这样才可以。
如果不加程序就不知道字符串在哪里结束
自然也不会得出正确的长度

char s[] = "i am a student";
cout << strlen(s) << endl;
cout << s << endl;
亦可