在调试c++程序的时候经常会遇见字符串的问题,由于c++中即兼容了原来的c形式的字符串char *,又有自己的特殊的字符串类string,在一些程序中由于接口的存在需要进行转换。
c++语言提供了两种字符串实现,其中较原始的一种只是字符串的c语言实现。与C语言的其他部分一样,它在c+的所有实现中可用,我们将这种实现提供的字符串对象,归为c-串,每个c-串char*类型的。标准头文件包含操作c-串的函数库。
c_str函数的返回值是const char* 的,不能直接赋值给char* 。实际操作过程我们可以用const char*给string类初始化。
三者的转化关系如下所示:
1. string转const char*
string s = “abc”;
const char* c_s = s.c_str();
2. const char* 转string,直接赋值即可
const char* c_s = “abc”;
string s(c_s);
3. string 转char*
string s = “abc”;
char* c;
const int len = s.length();
c = new char[len+1];
strcpy(c,s.c_str());
4. char* 转string
char* c = “abc”;
string s(c);
5. const char* 转char*
const char* cpc = “abc”;
char* pc = new char[strlen(cpc)+1];
strcpy(pc,cpc);
6. char* 转const char*,直接赋值即可
char* pc = “abc”;
const char* cpc = pc;
附:指针常量,常量指针
1 什么是指针常量?指针常量即指针类型的常量。
例:char *const name1=”John”;
name1=”abc”; //错误,name1指针,不能变,一个指针类型的变量,存放的是地址,所以不能把‘“abc”的地址赋给name1
char * name2= name1; //可以
2 什么是常量指针?常量指针即是指向常量的指针,指针的值可以改变,指针所指的地址中的内容为常量不能改变,
例:const char *name1=”John”;
char s[]=”abc”; name1=s; //正确,name1存放的地址可以改变
char * name2= name1; //不可以,因为name2 和 name1存放的是同一块地址,如果name2地址中的内容改了,则name1的内容也改了,那么name1就不再是指向常量的指针了。