先说一下string与char*和char[]的差别:
string 是一个类,而char *是一个指向char类型的指针,string封装了char *,是一个char *类型的容器。string的内存管理是由系统维护,只有在系统内存耗尽的情况下,才有可能出现内存相关问题;char * 是一个指针,可以指向一个字符串数组,这个数组可以在栈上分配,也可以在堆上分配,如果是在堆上分配,需要用户手动释放内存,char *的内存管理是由用户自己处理,容易出现内存不足等问题。
标准的string类提供了STL容器接口,具有一些方法比如begin()、end()、length()等,也可以进行截取substr()等方法,string可以根据下标访问迭代器也可以进行定位。string不一定以NULL('\0')结束。所以,不能将string直接赋值给char*。
char*与char[]是一样的,是以NULL('\0')结束;
char*与char[]对象是首地址,string的对象不是,所以不能当做首地址;
1、string 转换为char* :
(1)使用data()操作
string str = "hello world!";
char* p = (char*)str1.data();
(2)使用copy()操作
string str = "hello world!";
char p[40];
int copyLen = 7 ;
str.copy(p, copyLen , 0); //copyLen:复制字符个数,0:复制起始位置
*(p + copyLen) = '\0'; //添加结束符
PS:动态分配内存的方法1
string str = "hello world!";
int copyLen = str.length();
char* p = new char[copyLen + 1];
str.copy(p, copyLen, 0); //copyLen:复制字符个数,0:复制起始位置
*(p + copyLen) = '\0'; //添加结束
if (p != NULL)
{
delete p;
p == NULL;
}
(3)使用strcpy
string str = "hello world!";
const int len = str.length();
char* p = new char[len + 1];
strcpy(p,str.c_str());
*(p + copyLen) = '\0'; //添加结束
if (p != NULL)
{
delete p;
p == NULL;
}
2、string 转换为const char* :
string str1 = "hello world!";
const char *p1 = str1.c_str();
3、char 转换为string
char a = 'a' ;
string str(&a,1) ;
4、char* 转换为string
char* p1 = "hello world!";
string str1 = p1;
char p2[] = "hello world!";
string str2 = p2;
5、const char*转string
直接赋值即可
const char* c_s = "hello world!";
string s(c_s);
6、char* 转const char*
直接赋值即可
char* p = "hello world!";
const char* cp = p;
7、const char*转char*
这与string转char*比较像:
const char* cp = "hello world!";
const int len = strlen(cp) ;
char* p = new char[len];//足够长
strcpy(p,cp);
if (p != NULL)
{
delete p;
p == NULL;
}
string 是一个类,而char *是一个指向char类型的指针,string封装了char *,是一个char *类型的容器。string的内存管理是由系统维护,只有在系统内存耗尽的情况下,才有可能出现内存相关问题;char * 是一个指针,可以指向一个字符串数组,这个数组可以在栈上分配,也可以在堆上分配,如果是在堆上分配,需要用户手动释放内存,char *的内存管理是由用户自己处理,容易出现内存不足等问题。
标准的string类提供了STL容器接口,具有一些方法比如begin()、end()、length()等,也可以进行截取substr()等方法,string可以根据下标访问迭代器也可以进行定位。string不一定以NULL('\0')结束。所以,不能将string直接赋值给char*。
char*与char[]是一样的,是以NULL('\0')结束;
char*与char[]对象是首地址,string的对象不是,所以不能当做首地址;
1、string 转换为char* :
(1)使用data()操作
string str = "hello world!";
char* p = (char*)str1.data();
(2)使用copy()操作
string str = "hello world!";
char p[40];
int copyLen = 7 ;
str.copy(p, copyLen , 0); //copyLen:复制字符个数,0:复制起始位置
*(p + copyLen) = '\0'; //添加结束符
PS:动态分配内存的方法1
string str = "hello world!";
int copyLen = str.length();
char* p = new char[copyLen + 1];
str.copy(p, copyLen, 0); //copyLen:复制字符个数,0:复制起始位置
*(p + copyLen) = '\0'; //添加结束
if (p != NULL)
{
delete p;
p == NULL;
}
(3)使用strcpy
string str = "hello world!";
const int len = str.length();
char* p = new char[len + 1];
strcpy(p,str.c_str());
*(p + copyLen) = '\0'; //添加结束
if (p != NULL)
{
delete p;
p == NULL;
}
2、string 转换为const char* :
string str1 = "hello world!";
const char *p1 = str1.c_str();
3、char 转换为string
char a = 'a' ;
string str(&a,1) ;
4、char* 转换为string
char* p1 = "hello world!";
string str1 = p1;
char p2[] = "hello world!";
string str2 = p2;
5、const char*转string
直接赋值即可
const char* c_s = "hello world!";
string s(c_s);
6、char* 转const char*
直接赋值即可
char* p = "hello world!";
const char* cp = p;
7、const char*转char*
这与string转char*比较像:
const char* cp = "hello world!";
const int len = strlen(cp) ;
char* p = new char[len];//足够长
strcpy(p,cp);
if (p != NULL)
{
delete p;
p == NULL;
}