首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将std::string转换为const char*?

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

Stack Overflow用户
提问于 2010-11-18 02:22:17
回答 4查看 50.2K关注 0票数 27

可能重复:

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

代码语言:javascript
复制
void Foo::bar(const std::string& foobar) {
    // ...
    const char* foobar2 = (char*)foobar;
    // ...
}

这不起作用,并且我在编译过程中得到一个关于无效类型转换的错误。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-18 02:23:55

使用foobar.c_str()

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

票数 47
EN

Stack Overflow用户

发布于 2010-11-18 02:23:37

std::string::c_str()为您提供了一个const char*指针,指向表示字符串的字符数组(以null结尾)。

您不应操作此指针所指向的数据,因此,如果需要这样做,请复制数据。

双重编辑--在更具C++风格的中进行编辑

由于在可能的情况下避免使用原始指针和数组更好,因此还可以将数据放入std::vector<char>

代码语言:javascript
复制
#include <string>
#include <vector>

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

    // do stuff
}

编辑这更类似于C,因为它使用原始指针并显式地分配mem

代码语言:javascript
复制
#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;
}
票数 11
EN

Stack Overflow用户

发布于 2010-11-18 02:31:21

你会在这里得到很多关于str.c_str()的不正确的答案。:)虽然c_str()确实很有用,但请记住,这实际上不会将字符串转换为char*,而是将字符串的内容作为const char*返回。和这是一个很大的区别!

这里重要的是,仅当给定的string对象存在时,从c_str()获得的指针才有效。所以这将是非常错误的

代码语言:javascript
复制
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的新值,如:创建一个独立于原始的新值,那么您需要执行以下操作:

代码语言:javascript
复制
char* convert(const std::string& str) {
    char* result = new char[str.length()+1];
    strcpy(result,str.c_str());
    return result;
}

但是在大多数情况下,c_str()对你来说已经足够了。试着用物体的寿命来思考。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4207737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档