可能重复:
Convert std::string to const char* or char*
void Foo::bar(const std::string& foobar) {
// ...
const char* foobar2 = (char*)foobar;
// ...
}
这不起作用,并且我在编译过程中得到一个关于无效类型转换的错误。
是否有其他方法可以将std::string
转换为const char*
发布于 2010-11-18 02:23:55
使用foobar.c_str()
。
你可能会发现这个链接很有用:http://www.cppreference.com/wiki/string/start
发布于 2010-11-18 02:23:37
std::string::c_str()
为您提供了一个const char*
指针,指向表示字符串的字符数组(以null结尾)。
您不应操作此指针所指向的数据,因此,如果需要这样做,请复制数据。
双重编辑--在更具C++风格的中进行编辑
由于在可能的情况下避免使用原始指针和数组更好,因此还可以将数据放入std::vector<char>
中
#include <string>
#include <vector>
int main()
{
std::string str = "Hello";
std::vector<char> cvec(str.begin(), str.end());
// do stuff
}
编辑这更类似于C,因为它使用原始指针并显式地分配mem
#include <string>
#include <cstring>
int main()
{
std::string str = "Hello";
char *cptr = new char[str.size()+1]; // +1 to account for \0 byte
std::strncpy(cptr, str.c_str(), str.size());
// do stuff...
delete [] cptr;
}
发布于 2010-11-18 02:31:21
你会在这里得到很多关于str.c_str()
的不正确的答案。:)虽然c_str()
确实很有用,但请记住,这实际上不会将字符串转换为char*
,而是将字符串的内容作为const char*
返回。和这是一个很大的区别!
这里重要的是,仅当给定的string
对象存在时,从c_str()
获得的指针才有效。所以这将是非常错误的
class Something {
const char* name;
public:
Something(const std::string& pname) {
this->name = pname.c_str(); /* wrong! the pointer will go wrong as the object from the parameter ceases to exist */
}
};
因此,如果您想要创建一个独立于原始std::string
,的新值,如:创建一个独立于原始的新值,那么您需要执行以下操作:
char* convert(const std::string& str) {
char* result = new char[str.length()+1];
strcpy(result,str.c_str());
return result;
}
但是在大多数情况下,c_str()
对你来说已经足够了。试着用物体的寿命来思考。
https://stackoverflow.com/questions/4207737
复制相似问题