连接字符*

时间:2011-02-13 15:56:45

标签: c++ c char

我如何相互连接char *字符串。 例如:

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

我如何将它们连接到一个应该等于“直升机”的字符?

4 个答案:

答案 0 :(得分:8)

strncat

或使用string s。

答案 1 :(得分:6)

size_t newlen = strlen(a) + strlen(b);
char *r = malloc(newlen + 1);
strcpy(r, a);
strcat(r, b);

答案 2 :(得分:3)

在C ++中:

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

答案 3 :(得分:3)

如果你的系统有asprintf()(这些日子很常见),那么很容易:

char* p;
int num_chars = asprintf(&p, "%s%s", a, b);

第二个参数是类似于printf()的格式字符串,因此您可以混合使用常量文本,整数,双精度等,控制字段宽度和精度,填充字符,对齐等。如果num_chars!= - 1(错误),然后p指向可以与free()一起发布的堆分配内存。使用asprintf()可以避免相对冗长且容易出错的步骤来自行计算所需的缓冲区大小。

在C ++中:

std::string result = std::string(a) + b;

注意:a + b添加两个指针 - 不是您想要的,因此+运算符的至少一侧需要查看std::string,这将确保字符串特定的连接使用运算符。

strncat的接受答案值得进一步评论:它可用于在现有可写缓冲区中的ASCIIZ字符串之后连接更多文本数据,因为该缓冲区有足够的空间来备用你无法安全地/可移植地连接到字符串文字上,创建这样的缓冲区仍然很痛苦。如果你使用malloc()来确保它的长度恰到好处,那么strcat()可以无论如何都要优先使用strncat()。)