介绍几种std::string 转 char*的方法
1、const_cast operatorstring::c_str()
和string::data()
都能返回const char*
, 要得到一个non-const版本,我们可以使用const_cast移除const属性,由于不涉及复制,因此有固定的时间开销.
注意,这种方法会直接修改std::string
底层数据,任何对char*
的修改都会表现在string上
#include <iostream>
#include <string>
int main()
{
std::string str = "std::string to char*";
char* c = const_cast<char*>(str.c_str());
std::cout << c;
return 0;
}
2、strcpy()
将string::c_str()
或string::data()
的返回值const char*
传递给strcpy,该函数内部将其复制到指定的字符串数组中并返回指针。
#include <iostream>
#include <string>
#include <cstring>
int main()
{
std::string str = "std::string to char*";
char* c = strcpy(new char[str.length() + 1], str.c_str());
std::cout << c;
delete[] c;
return 0;
}
3、std::copystrcpy
是C 函数,推荐使用标准模板库函数std::copy
#include <iostream>
#include <string>
int main()
{
std::string str = "std::string to char*";
int len = str.size();
char *c = new char[len + 1];
std::copy(str.begin(), str.end(), c);
c[len] = '\0';
std::cout << c;
delete[] c;
return 0;
}
4、std::vector
std::string 在c++98/03标准下不能保证内存连续,可以先转为std::vector
#include <iostream>
#include <string>
#include <vector>
int main()
{
std::string str = "std::string to char*";
std::vector<char> chars(str.begin(), str.end());
chars.push_back('\0');
char *c = &chars[0];
std::cout << c;
return 0;
}
5、C++11 std::string 连续存储
与c++98/03
标准不同,C++11
保证std::string
内存分配是连续的,因此可以直接调用&str[0]
或者&*str.begin()
来获取指向底层数组的指针.由于不涉及复制,时间开销固定,但是对char*
做的左右修改都会反应到std::string
中
#include <iostream>
#include <string>
int main()
{
std::string str = "std::string to char*";
char* c = &*str.begin();
std::cout << c;
return 0;
}
转自 https://www.techiedelight.com/convert-std-string-char-cpp/
暂无评论