Мне нужно объединить два константных символа, например:
const char *one = "Hello ";
const char *two = "World";
Как я могу это сделать?
Мне переданы эти char*
s из сторонней библиотеки с интерфейсом C, поэтому я не могу просто использовать std::string
вместо них.
c++
c
string-concatenation
Энтони Колдуэлл
источник
источник
strcpy
иstrcat
вызовы, я подумал, что имеет смысл изменить теги.Ответы:
В вашем примере один и два - указатели char, указывающие на константы char. Вы не можете изменить символьные константы, на которые указывают эти указатели. Так что ничего вроде:
не будет работать. Вместо этого у вас должна быть отдельная переменная (массив символов) для хранения результата. Что-то вроде этого:
источник
strcpy(one,two);
должно бытьstrcat(one,two);
(но это не значит , что это правильно, как вы правильно заметили).sprintf(dest,"%s%s",one,two)
и забыть копию?Способ C:
Способ C ++:
Способ во время компиляции:
источник
Если вы используете C ++, почему бы вам не использовать
std::string
вместо строк в стиле C?Если вам нужно передать эту строку в C-функцию, просто передайте
three.c_str()
источник
Использование
std::string
:источник
Обновлено: изменено
string total = string(one) + string(two);
наstring total( string(one) + two );
по соображениям производительности (избегает построения второй строки и временного итога строки)источник
Еще один пример:
Но если вы специально не хотите или не можете использовать стандартную библиотеку C ++, использование
std::string
, вероятно, безопаснее.источник
new
. И если он может это использовать, он должен использоватьstd::string
, как вы говорите.Похоже, вы используете C ++ с библиотекой C, и поэтому вам нужно работать с
const char *
.Я предлагаю обернуть их
const char *
вstd::string
:источник
Прежде всего, вам нужно создать динамическое пространство памяти. Затем вы можете просто вставить в него две строки. Или вы можете использовать "строковый" класс C ++. Старая школа C:
Новый способ C ++
источник
Если вы не знаете размер строк, вы можете сделать что-то вроде этого:
источник
Вы можете использовать
strstream
. Формально он устарел, но я думаю, что это отличный инструмент, если вам нужно работать со строками C.Это запишет,
one
а затемtwo
в поток и добавит завершающее\0
использованиеstd::ends
. В случае, если в обеих строках может быть записано ровно99
символы - чтобы не осталось места для записи\0
- мы пишем один вручную в последнюю позицию.источник
streambuf
вывод в буфер символов, используемый с,ostream
тоже не так уж сложно.источник
Подключение двух константных указателей char без использования команды strcpy при динамическом распределении памяти:
источник