如何连接const char数组和char数组指针?

时间:2012-03-14 10:49:17

标签: c++ arrays string concatenation

直接开展业务:我的代码大致如此:

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*

那么,我如何连接这两个?

其他信息:
编译器:GNU / Linux 2.6.32-5-amd64上的g ++ 4.4.5

3 个答案:

答案 0 :(得分:3)

嗯,你正在使用C ++,所以你应该使用std::stringstream

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

答案 1 :(得分:2)

"Foo""Bar"是文字,他们没有插入(<<)运算符。

如果你想做基本的连接,你需要使用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;
}

答案 2 :(得分:1)

"Foo""bar"的类型为char const[4]。从错误消息, 我认为表达式doSomething(param)的类型为char* (这是可疑的 - 如果有一个案例,这是非常特殊的 函数可以合理地返回char*)。这些类型都不是 支持<<

你在这里处理不支持的C样式字符串 连接(至少不合理)。在C ++中,连接 字符串上的运算符是+,而不是<<,并且您需要C ++字符串 工作:

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

(一旦第一个参数为std::string,隐式转换就会出现 春天生效转换其他人。)

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