C++,用char*指针操作string类字符串

C++,用char*指针操作string类字符串

在c语言中,操作字符串(字符数组)时,经常使用char型指针,对字符数组进行输入与输出等等操作。
而在C++中,更多使用已经封装过的string类来操作字符串,而string类的底层实现也是字符数组char[],那当我们用char型指针对string类字符串进行操作时,string类是怎么样的。

#include<iostream>

using namespace std;

int main(){
	string str; 
	char *p;
	p = &str[0];
	cout<<"请输入字符串:\n"; 
	cin>>p;
	cout<<"string输出:\n"<<str<<endl;
	cout<<"--------------------"<<endl;
	cout<<"p指针输出:\n"<<p<<endl;
	return 0;
}

输出结果是:

在这里插入图片描述
通过string类名输出的结果为空,第一步猜测是string未初始化的原因…

#include<iostream>

using namespace std;

int main(){
	string str = "     ";//5个空格 
	char *p;
	p = &str[0];
	cout<<"请输入字符串:\n"; 
	cin>>p;
	cout<<"string输出:\n"<<str<<endl;
	cout<<"--------------------"<<endl;
	cout<<"p指针输出:\n"<<p<<endl;
	return 0;
} 

运行结果:
在这里插入图片描述
当我把string初始为5个空格时,string类名输出的字符也是5个…
而以原来的指针输出,字符串没有变化.

由此可得出一个结论.当通过一个char型指针对一个string对象进行赋值,会将数据存入该string对象中,底层数组也会进行扩容(个人猜测),但是string对象中length()只能通过正常的string函数操作,才能改变,而string类的输出也是通过length()判断输出的长度来进行输出。


版权声明:本文为weixin_44129784原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。