【问题标题】:How to concatenate a const char array and a char array pointer?如何连接 const char 数组和 char 数组指针?
【发布时间】:2012-03-14 10:49:16
【问题描述】:

直奔业务:我的代码大致如下:

char* assemble(int param)
{
    char* result = "Foo" << doSomething(param) << "bar";
    return result;
}

现在我得到的是:

error: invalid operands of types ‘const char [4]’ and ‘char*’ to binary ‘operator<<’

编辑: doSomething 返回 char*

那么,我该如何连接这两者呢?

附加信息:
编译器:g++ 4.4.5 on GNU/Linux 2.6.32-5-amd64

【问题讨论】:

  • 请注意,&lt;&lt; 从左到右分组,而不是从右到左分组。因此,当您看到std::cout &lt;&lt; a &lt;&lt; b &lt;&lt; c 时,这并不意味着“连接a、b 和c 并将结果写入std::cout”,并且&lt;&lt; 不是连接运算符。它的意思是(((std::cout &lt;&lt; a) &lt;&lt; b) &lt;&lt; c),即“将a、b和c依次写入std::cout”。 operator&lt;&lt; for streams 返回流本身,正是为了支持这种链接。

标签: c++ arrays string concatenation


【解决方案1】:

嗯,你使用的是 C++,所以你应该使用 std::stringstream:

std::string assemble(int param)
{
    std::stringstream ss;
    ss << "Foo" << doSomething(param) << "bar";
    return ss.str();
}; // eo assemble

【讨论】:

    【解决方案2】:

    "Foo""Bar" 是文字,它们没有插入 (&lt;&lt;) 运算符。

    如果你想做基本的连接,你需要使用std::string

    std::string assemble(int param)
    {
        std::string s = "Foo";
        s += doSomething(param); //assumes doSomething returns char* or std::string
        s += "bar";
        return s;
    }
    

    【讨论】:

    • 这是未定义的行为,您将 reference 返回到一个临时对象。字符串将在 return 语句后立即销毁,您将留下一个悬空引用
    • @DavidRodríguez-dribeas: 已修复 :)
    【解决方案3】:

    "Foo""bar" 的类型为 char const[4]。从错误消息中, 我收集到表达式doSomething(param) 的类型为char* (这是可疑的 - 有一个案例真的很特殊 一个函数可以合理地返回一个char*)。这些类型都不是 支持&lt;&lt;

    你在这里处理的是 C 风格的字符串,它不支持 连接(至少不合理)。在 C++ 中,连接 字符串上的运算符是+,而不是&lt;&lt;,您需要C++ 字符串 工作:

    std::string result = std::string( "Foo" ) + doSomething( param ) + "bar";
    

    (一旦第一个参数是std::string,隐式转换将 spring 生效以转换其他人。)

    但我会看看 doSomething 函数。这里有些不对劲 使用返回 char* 的函数。

    【讨论】:

      猜你喜欢
      • 2021-01-26
      • 2017-09-13
      • 1970-01-01
      • 2020-12-23
      • 1970-01-01
      • 2019-09-13
      • 1970-01-01
      • 1970-01-01
      • 2018-09-26
      相关资源
      最近更新 更多