我的程序中有错误:“无法从字符串转换为字符*”。如何执行此转换?
答案 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::vector
或new char[]
,这取决于您的需求。
答案 6 :(得分:1)
std::string::c_str()
返回一个c-string,其内容与string
对象相同。
std::string str("Hello");
const char* cstr = str.c_str();