Вопрос:

Как объединить константный массив символов и указатель на массив символов?

c++ arrays string concatenation

2490 просмотра

3 ответа

12034 Репутация автора

Прямо в бизнес: у меня код выглядит примерно так:

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 в GNU / Linux 2.6.32-5-amd64

Автор: Cobra_Fast Источник Размещён: 14.03.2012 10:49

Ответы (3)


3 плюса

33377 Репутация автора

Ну, вы используете C ++, поэтому вы должны использовать std::stringstream:

std::string assemble(int param)
{
    std::stringstream ss;
    ss << "Foo" << doSomething(param) << "bar";
    return ss.str();
}; // eo assemble
Автор: Moo-Juice Размещён: 14.03.2012 10:51

2 плюса

22884 Репутация автора

Решение

"Foo"и "Bar"являются литералами, у них нет <<оператора insert ( ).

вместо этого вам нужно использовать, 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;
}
Автор: Necrolis Размещён: 14.03.2012 10:52

1 плюс

133469 Репутация автора

"Foo"и "bar"иметь тип char const[4]. Из сообщения об ошибке я понял, что выражение doSomething(param)имеет тип char* (что является подозрительным - действительно исключительным является случай, когда функция может разумно вернуть a char*). Ни один из этих типов не поддерживает <<.

Здесь вы имеете дело со строками в стиле C, которые не поддерживают конкатенацию (по крайней мере, не разумно). В C ++ оператор конкатенации в строках есть +, нет <<, и вам нужны строки C ++ для его работы:

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

(Как только первый аргумент является std::string, неявные преобразования вступят в силу, чтобы преобразовать другие.)

Но я бы посмотрел на эту doSomethingфункцию. Что-то не так с функцией, которая возвращает char*.

Автор: James Kanze Размещён: 14.03.2012 11:21
Вопросы из категории :
32x32