把string转换为char* 有3中方法:
1.data
如:
string str="abc";
char*p=str.data();
2.c_str
如:string str="gdfd";
const char*p=str.c_str();
3.copy
比如
string str="hello";
char p[40];
str.copy(p,5,0); //这里5,代表复制几个字符,0代表复制的位置
*(p+5)='\0'; //要手动加上结束符
cout <<p;
示例程序:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string line;
getline(cin,line);
char str[20];
int size=line.size();
line.copy(str,line.size(),0);
//char str[20]="liuyanbo";
char upper[20];
for(int i=0;i<size;++i)
{
//cout<<static_cast<char>(toupper(str[i]));
upper[i]=static_cast<char>(toupper(str[i]));
}
upper[i]='\0';
cout<<upper<<endl;
return 0;
}
/****************************************************************/
string类型的变量如果要转换成char*类型字符串,string类中提供了三个方法如下:
const charT* c_str() const //c_str 直接返回一个以\0结尾的字符串。 const charT*data() const //data 直接以数组方式返回string的内容,其大小为size()的返回值,结尾并没有\0字符size_type copy(charT* buf, size_type n,size_type pos = 0) const //copy 把string的内容拷贝到buf空间中。
注意:c_str()的返回类型是指向常量charT类型的指针,说明指针所指空间的内容不允许修改,只可以读取不可以更改。c_str()返回的指针
是string内部的指针,并没有像copy函数一样把其内容拷贝出来。这可以从下面例子中看出来:
string * pstr = new string("Hello world.");
const char * ptmp = pstr->c_str(); //并没有通过malloc或者new为指针ptmp分配内存,只是把string中的数据指针赋给了ptmp而已
cout<<"Get the string->cstris:"<<ptmp<<endl; //正确的输出了Hello world.
但是如果用copy方法时必须如下方法:
char * p = (char *)malloc(100*sizeof(char)); //必须为指针p分配内存空间用于存放从string里拷贝出来的数据
pstr->copy(p,pstr->length(),0); //如果没有上面分配内存空间,这个语句在运行时就会报段错误。
cout<<"char * p:copy from stringis:"<<p<<endl; //正确的输出了字符串Hello world