【问题标题】:Coverting std::String to char * [duplicate]将 std::String 转换为 char * [重复]
【发布时间】: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() .....

标签: c++


【解决方案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 是一个不错的选择。
    猜你喜欢
    • 2012-10-31
    • 1970-01-01
    • 2014-07-13
    • 2010-11-14
    • 2014-03-17
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多