Прежде всего, не используйте char*
или char[N]
. Пользуйтесь std::string
, тогда все остальное становится так просто!
Примеры,
std::string s = "Hello";
std::string greet = s + " World"; //concatenation easy!
Легко, правда?
Теперь, если вам нужно char const *
по какой-то причине, например, когда вы хотите перейти к какой-либо функции, вы можете сделать это:
some_c_api(s.c_str(), s.size());
предполагая, что эта функция объявлена как:
some_c_api(char const *input, size_t length);
Изучите std::string
себя, начиная отсюда:
Надеюсь, это поможет.
Поскольку это C ++, почему бы не использовать
std::string
вместоchar*
? Конкатенация будет тривиальной:источник
operator+=
выполняется и освобождение, и выделение. Выделение кучи - одна из самых дорогих операций, которые мы обычно выполняем.Если вы программировали на C, то предполагая, что это
name
действительно массив фиксированной длины, как вы говорите, вам нужно сделать что-то вроде следующего:Теперь вы понимаете, почему все рекомендуют
std::string
?источник
В перенесенной библиотеке C есть функция strcat () , которая выполнит за вас конкатенацию "строки в стиле C".
Кстати, хотя в C ++ есть множество функций для работы со строками в стиле C, это может быть полезно, если вы попытаетесь создать свою собственную функцию, которая делает это, например:
...а потом...
... результат чего есть
file_name.txt
.У вас также может возникнуть соблазн написать свой собственный,
operator +
однако оператор IIRC перегружается только указателями, поскольку аргументы не разрешены.Кроме того, не забывайте, что результат в этом случае распределяется динамически, поэтому вы можете вызвать для него delete, чтобы избежать утечек памяти, или вы можете изменить функцию, чтобы использовать массив символов, выделенный стеком, при условии, конечно, что он имеет достаточную длину.
источник
strncat()
функция, которая обычно является лучшей альтернативойstrncat
здесь не имеет значения, потому что мы уже знаем длину второго параметра".txt"
. Так бы и былоstrncat(name, ".txt", 4)
, что нам ничего не дает.strcat (destination, source) может использоваться для объединения двух строк в C ++.
Чтобы получить более глубокое понимание, вы можете поискать по следующей ссылке -
http://www.cplusplus.com/reference/cstring/strcat/
источник
Лучше использовать строковый класс C ++ вместо строки C старого стиля, жизнь будет намного проще.
если у вас есть существующая строка старого стиля, вы можете скрыть ее до строкового класса
источник
C ++ 14
Ответ на вопрос:
источник
источник