将 std::String 转换为 char * [重复]

Posted

技术标签:

【中文标题】将 std::String 转换为 char * [重复]【英文标题】:Coverting std::String to char * [duplicate] 【发布时间】:2013-09-10 21:39:56 【问题描述】:

我需要将字符串传递给仅接受 char * 的套接字 send() 函数。所以在这里我试图转换它:

void myFunc(std::string str)  //Taking string here const is good idea? I saw it on some examples on web

    char *buf = str.c_str;    //taking buf const is good idea?
    std::cout << str;


int main()

    const std::string str = "hello world";
    myFunc(str);
    return 0;

给出错误:

test.cpp:6:18: error: cannot convert ‘std::basic_string<_CharT, _Traits, _Alloc>::c_str<char, std::char_traits<char>, std::allocator<char> >’ from type ‘const char* (std::basic_string<char>::)()const’ to type ‘char*’

【问题讨论】:

c_str() ..... 【参考方案1】:

首先,c_str() 是一个函数,所以你需要调用它。

其次,它返回 const char* 而不是 char*

总而言之:

const char* buf = str.c_str();

【讨论】:

syam:为什么需要const?没有它也可以! @Catty 曾经有一段时间,char* buf = str.c_str() 被接受为通常的 const 正确性规则的例外,但现在这不再是有效的 C++。如果您的编译器接受它,则仅表示它不遵守最新标准。不过,这不应该阻止您尝试编写正确的代码。【参考方案2】:

首先,调用 c_str() 有一个函数。 之后,c_str() 返回一个 const char*,如果您想使用 std::strcpy() 获得一个 char*,则需要复制它:http://en.cppreference.com/w/cpp/string/byte/strcpy

【讨论】:

【参考方案3】:

试试:

void myFunc(std::string str)

    const char *buf = str.c_str();
    std::cout << str;

【讨论】:

这是正确的方法吗?我不知道,我只是想知道它是否会在以后产生任何问题 如果你的 send() 例程接受一个 const char* (如果我们谈论的是套接字,它可能会接受),这是正确的方法。另一方面,如果您要发送二进制数据,我建议您使用 std::vector 而不是 std::string. 好的,我正在发送字符串和 int 值。使用向量 有什么好处? @Catty 如果您将 int 值作为文本发送,您可以使用 std::string 并稍后调用 str.c_str()。如果您将 int 值作为二进制数据发送,则需要对其进行编码(考虑字节序)并使用缓冲区来保存编码数据。在这种情况下,std::vector 是一个不错的选择。

以上是关于将 std::String 转换为 char * [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将 std::String 转换为 char * [重复]

如何将 std::string 转换为 const char*? [复制]

将 std::basic_string<Char> 转换为字符串

将函数参数 `const char*` 转换为 `std::string_view` 是不是安全?

如何将 std::vector<std::string> 转换为 C api 的 char*[] [重复]

将字符串从 std::string 转换为 const char * 时出现数据丢失问题