соединительные символы * - PullRequest
3 голосов
/ 13 февраля 2011

Как бы я соединил строки char * друг с другом.Например:

char* a="Heli";
char* b="copter";

Как бы я связал их с одним символом c, который должен быть равен "Вертолет"?

Ответы [ 4 ]

8 голосов
/ 13 февраля 2011

strncat

Или используйте string s.

6 голосов
/ 13 февраля 2011
size_t newlen = strlen(a) + strlen(b);
char *r = malloc(newlen + 1);
strcpy(r, a);
strcat(r, b);
3 голосов
/ 14 февраля 2011

Если в вашей системе есть 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() в любом случае.)

3 голосов
/ 13 февраля 2011

В C ++:

std::string foo(a);
std::string bar(b);
std::string result = foo+bar;
...