如何将std :: string转换为const char*?

Ric*_*nop 26 c++

可能重复:
将std :: string转换为const char*或char*

void Foo::bar(const std::string& foobar) {
    // ...
    const char* foobar2 = (char*)foobar;
    // ...
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,我在编译期间遇到有关无效转换的错误.

有没有其他方式转换std::stringconst char*

小智 47

使用 foobar.c_str().

您可能会发现此链接很有用:http://www.cppreference.com/wiki/string/start


wkl*_*wkl 11

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
}
Run Code Online (Sandbox Code Playgroud)

编辑这更像是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;
}
Run Code Online (Sandbox Code Playgroud)

  • 使用`std :: vector`,永远不要使用`new T []`. (3认同)