我在我的程序中遇到了一个错误:“无法将字符串转换为char*”。我该如何执行此转换?
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];
使用str.c_str()
来获取const char*
:
const char *pch = str.c_str();
请注意,生成的const char*
只在str
被更改或销毁之前有效。const
的,你可能不应该使用std::string
,因为它不是为了允许在其背后更改其基础数据而设计的。尽管如此,您可以通过调用&str[0]
或&* str.begin()
来获取指向其数据的指针。std::string
将其数据存储在连续的内存块中,因此这可能会导致程序崩溃。我认为这已经改变了,但我甚至不能记得这是针对C++03还是即将到来的下一个标准版本C++1x的。std::vector<char>
。您可以使用相同的方式访问其数据:&v[0]
或&*v.begin()
。//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;
如果你想从一个 string
转换成一个 char*
(即不是 const char*
),你可以这样做,但要小心:这里有险情:
string foo = "foo";
char* foo_c = &foo[0];
如果你尝试修改字符串的内容,你必须自行承担责任。
使用string
对象的c_str()
方法来获取const char*
指针。警告:如果修改或销毁string
对象,则返回的指针将不再有效。
const char*
适合您的需求,请使用此代码:myString.c_str()
如果您确实需要char*
,并且确定char*
不会更改,则可以使用此代码:const_cast<char*>(myString.c_str())
如果char*
可能会更改,则需要将字符串复制到其他地方并使用该位置。这个位置可以是std::vector
或new char[]
,具体取决于您的需求。std::string::c_str()
会返回一个与string
对象内容相同的C字符串。
std::string str("Hello");
const char* cstr = str.c_str();