文章目录
原文链接(有更详细的解释)
1.char*,char [] 转换为string
可以直接赋值string s=char[]
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <unordered_set>
#include <unordered_map>
using namespace std;
int main() {
string str1;
const char* s1="i am 1";
str1=s1;
cout<<str1<<endl;
string str2;
const char* s2="i am 2";
str2=s2;
cout<<str2<<endl;
return 0;
}
2.string转换为char*,char []
1.首先必须了解,string可以被看成是以字符为元素的一种容器。字符构成序列(字符串)。有时候在字符序列中进行遍历,标准的string类提供了STL容器接口。具有一些成员函数比如begin()、end(),迭代器可以根据他们进行定位。
2.注意,与char[]不同的是,string不一定以NULL(’\0’)结束。string长度可以根据length()得到,string可以根据下标访问。所以,不能将string直接赋值给char[]
(1)调用string的data函数(不附加结束符’\0’)(推荐使用!!)
string str="abc";
char *p=str.data();
(2)调用string的c_str函数(附加结束符’\0’)
//1.错误的
//c最后指向的内容是垃圾,因为str对象被析构,其内容被处理
//c_str()返回的是一个临时指针,不能对其进行操作
string str="gdfd";
char* c=str.c_str();
//2.正确的
//c_str() 以 char* 形式传回 string 内含字符串
//如果一个函数要求char*参数,可以使用c_str()方法:
//输出 "Hello World!"
string s = "Hello World!";
printf("%s", s.c_str());
//3.正确的
char c[20];
string s="1234";
strcpy(c,s.c_str());
(3)调用string的copy函数
string str="hello";
char p[40];
str.copy(p,5,0); //这里5,代表复制几个字符,0代表复制的位置
*(p+5)='/0'; //要手动加上结束符
cout < <p;