c++ string 字符串结尾是否以‘\0‘区分

1.先说测试结果,string 并不是以‘\0'作为字符串结尾的标志,但是经试验,字符串可以越界访问a[3],并且字符串的结尾确实是'\0';

实验环境:vs2017,win 10,c++ 17

	{
		//string a("abcd", 3);
		string a = "abs";
		cout << "---------------------" << endl;
		cout << a.capacity() << endl;  //15
		cout << a.size() << endl;   //3
		if (a[3] == '\0') {
			cout << "yes" << endl; //说明字符串结尾确实是'\0'
		}
		else {
			cout << "no" << endl;
		}
		a[1] = '\0';
		cout << a << endl; //说明在c++中,的确不是以'\0'为结尾的识别符号
	}

2.Q&A:经查找,std::string 并未规定需要‘\0'作为字符串结尾,编译器在实现时既可以在结尾出加,也可以不加。

  实际上,c++的字符串,确实不需要添加字符结束标志,因为字符串是面向对象的,长度信息直接被存储在对象成员中,而c语言中,所有字符串是以字符串数组存储的,使用char *指针时,需要一个特殊的字符来标志字符串的结束。

3.验证存储区域

	{
			//验证对象a的存储地址,以及其指向的字符串的首地址
			cout << "###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值