字符串相关探究

有关以’\0’结尾的问题

1.string类型不以’\0’结尾,例子如下:

string s="asdc";
for(int i=0;s[i]!='\0';i++)
{
	cout<<s[i];
}

此程序运行会报错(超出范围),所以我们可以隐约感觉字符串末尾并不会有’\0’。我们知道sizeof()会算上’\0’的,因此也可以通过此方法来验证这个结论。

2.字符数组并没有明确要求最后一个字符是‘\0’。

char a[]={'1','2','3','4'} //末尾我们并没有加上'\0',但此代码是可行的。并且sizeof()值为4,因此,系统也不会自动在末尾上补上'\0'。

值得我们注意的是,因为末尾不存在’\0’,所以我们无法用strlen()正确地测出其长度,只能用sizeof()检测。并且这还会带来很多潜在的危险,因此,我们习惯性地主动在末尾加上’\0’。

3.用字符串字面值来初始化字符数组,系统则会在末尾自动加上’\0’。

char a[]="hello" //等价于//char a[]={'h','e','l','l','o','\0'}

猜你喜欢

转载自blog.csdn.net/weixin_44826456/article/details/88832243