如何在c ++中将字符串转换为char *?

时间:2010-11-11 18:00:45

标签: c++ string char

我的程序中有错误:“无法从字符串转换为字符*”。如何执行此转换?

7 个答案:

答案 0 :(得分:28)

如果您可以选择const char*,则只需在其上调用c_str()方法:

const char *mycharp = mystring.c_str();

如果您确实需要可修改的char*,则需要复制字符串的缓冲区。 vector是处理此问题的理想方式:

std::vector<char> v(mystring.length() + 1);
std::strcpy(&v[0], mystring.c_str());
char* pc = &v[0];

答案 1 :(得分:15)

调用str.c_str()获取const char*

const char *pch = str.c_str();

请注意,生成的const char*仅在str更改或销毁之前有效。


但是,如果您确实需要非const,则可能不应使用std::string,因为它不是为了允许更改其背后的基础数据而设计的。也就是说,您可以通过调用&str[0]&*str.begin()来获取指向其数据的指针。

这种丑陋应被视为一种特征。在C ++ 98中,std::string甚至不需要将其数据存储在连续的内存块中,因此这可能会爆炸到您的脸上。我认为已经改变了,但我甚至不记得这是针对C ++ 03还是即将推出的下一版标准C ++ 1x。

如果您需要这样做,请考虑改用std::vector<char>。您可以采用相同的方式访问其数据:&v[0]&*v.begin()

答案 2 :(得分:9)

//assume you have an std::string, str. 
char* cstr = new char[str.length() +1]; 
strcpy(cstr, str.c_str()); 

//eventually, remember to delete cstr
delete[] cstr; 

答案 3 :(得分:3)

使用c_str()对象上的string方法获取const char*指针。警告:如果string对象被修改或销毁,则返回的指针不再有效。

答案 4 :(得分:3)

既然您想从string转到char*(即,不是const char*),您可以这样做但请注意:这里有龙:

string foo = "foo";
char* foo_c = &foo[0];

如果您尝试修改字符串的内容,那么您可以自己做得很好。

答案 5 :(得分:2)

如果const char*对你有好处,请使用:myString.c_str()

如果您确实需要char*并且确定char*不会更改,那么您可以使用此const_cast<char*>(myString.c_str())

如果char*可能会发生变化,那么您需要将字符串复制到其他内容并使用它。其他内容可能是std::vectornew char[],这取决于您的需求。

答案 6 :(得分:1)

std::string::c_str()返回一个c-string,其内容与string对象相同。

std::string str("Hello");
const char* cstr = str.c_str();