Если в вашей системе есть asprintf () (довольно часто в наши дни), то это просто:
char* p;
int num_chars = asprintf(&p, "%s%s", a, b);
Второй аргумент - это строка формата, похожая на printf()
, поэтому вы можете смешивать постоянный текст, целые, двойные и т. Д., Контролировать ширину и точность поля, дополняющие символы, выравнивание и т. Д. ошибка), то p
затем указывает на выделенную кучу память, которая может быть освобождена с помощью free()
. Использование asprintf()
позволяет избежать относительно многословных и подверженных ошибкам шагов для самостоятельного вычисления необходимого размера буфера.
В C ++:
std::string result = std::string(a) + b;
Примечание: a + b
добавляет два указателя - не то, что вам нужно, поэтому по крайней мере одна сторона оператора +
должна видеть std::string
, что обеспечит использование оператора конкатенации для конкретной строки.
(Принятый ответ strncat
заслуживает дополнительного комментария: его можно использовать для объединения более текстовых данных после строки ASCIIZ в существующем доступном для записи буфере, поскольку в этом буфере есть место для резервирования. не может безопасно / переносить конкатенацию на строковый литерал, и создание такого буфера все еще затруднительно. Если вы делаете это с помощью malloc()
, чтобы убедиться, что это точно правильная длина, тогда strcat()
можно использовать вместо strncat()
в любом случае.)