我如何相互连接char *字符串。 例如:
char* a="Heli";
char* b="copter";
我如何将它们连接到一个应该等于“直升机”的字符?
答案 0 :(得分:8)
答案 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()
。)