关于c ++:如何将std :: string转换为const char *?


How to convert std::string to const char*?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Convert std::string to const char* or char*

1
2
3
4
5
void Foo::bar(const std::string& foobar) {
    // ...
    const char* foobar2 = (char*)foobar;
    // ...
}

这不起作用,在编译无效的强制转换时我会得到一个错误。

是否有其他方法将std::string转换为const char*


使用foobar.c_str()

你会发现这个有用的链接:http://///启动www.cppreference.com字符串维基


你能std::string::c_str()const char*字符指针数组与字符串(这是空终止)。

你不应该manipulate指针的数据这一点,所以如果你需要的是,复制的数据。

双编辑做它在更多的C + +时尚

因为它是nicer避免使用原始分,在与阵列的可能,你也可以把这个数据到一个std::vector

1
2
3
4
5
6
7
8
9
10
#include <string>
#include <vector>

int main()
{
    std::string str ="Hello";
    std::vector<char> cvec(str.begin(), str.end());

    // do stuff
}

这是因为更多的编辑它使用原始分,C类和明确allocates MEM

1
2
3
4
5
6
7
8
9
10
11
12
#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;
}


你会得到不正确的答案有很多关于str.c_str()这里。而事实上c_str())是有用的,请保持头脑,这真的不会对char*转换字符串,而字符串返回的内容的const char*。这是一个大的差。

什么是重要的是,你在c_str()指针是有效的,只有到了龙的string对象存在。所以这将是错误的:terribly

1
2
3
4
5
6
7
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独立,然后你会想的东西,像这样:

1
2
3
4
5
char* convert(const std::string& str) {
    char* result = new char[str.length()+1];
    strcpy(result,str.c_str());
    return result;
}

但是仍然会很c_str()够你在大多数情况下。只是想尝试,在条款的生活目标的时间。


1
const char* foobar2 = foobar.c_str();

声明的常量。否则,你必须将它复制到字符串缓冲区。