我想将std::string转换为char*或char[]数据类型。
std::string str = "string";
char* chr = str;
结果:"错误:不能转换' std::string '到' char '…"
有什么方法可以做到这一点?
我想将std::string转换为char*或char[]数据类型。
std::string str = "string";
char* chr = str;
结果:"错误:不能转换' std::string '到' char '…"
有什么方法可以做到这一点?
当前回答
你可以使用迭代器。
std::string str = "string";
std::string::iterator p=str.begin();
char* chr = &(*p);
祝你好运。
其他回答
这可能是对bobobobo的回答的一个更好的评论,但我没有那个代表。它完成了同样的事情,但是使用了更好的实践。
虽然其他答案很有用,但如果你需要显式地将std::string转换为char*而不使用const, const_cast是你的朋友。
std::string str = "string";
char* chr = const_cast<char*>(str.c_str());
注意,这不会为您提供数据的副本;它会给你一个指向字符串的指针。因此,如果修改chr的一个元素,就会修改str。
为了完整起见,不要忘记std::string::copy()。
std::string str = "string";
const size_t MAX = 80;
char chrs[MAX];
str.copy(chrs, MAX);
std::string::copy()不终止NUL。如果你需要确保在C字符串函数中使用NUL终止符:
std::string str = "string";
const size_t MAX = 80;
char chrs[MAX];
memset(chrs, '\0', MAX);
str.copy(chrs, MAX-1);
它不会自动转换(感谢上帝)。您必须使用c_str()方法来获取C字符串版本。
std::string str = "string";
const char *cstr = str.c_str();
注意,它返回一个const char *;你不允许改变c_str()返回的c风格字符串。如果你想处理它,你必须先复制它:
std::string str = "string";
char *cstr = new char[str.length() + 1];
strcpy(cstr, str.c_str());
// do stuff
delete [] cstr;
或者在现代c++中:
std::vector<char> cstr(str.c_str(), str.c_str() + str.size() + 1);
假设你只需要一个c风格的字符串作为输入传递:
std::string str = "string";
const char* chr = str.c_str();
或者,你可以使用向量来获得一个可写的char*,如下所示;
//this handles memory manipulations and is more convenient
string str;
vector <char> writable (str.begin (), str.end) ;
writable .push_back ('\0');
char* cstring = &writable[0] //or &*writable.begin ()
//Goodluck