C++ 连接字符*

C++ 连接字符*,c++,c,char,C++,C,Char,如何将char*字符串相互连接。 例如: char* a="Heli"; char* b="copter"; 如何将它们连接到一个字符c,该字符c应等于“直升机”? 或者在C++中使用s.: std::string foo(a); std::string bar(b); std::string result = foo+bar; std::string result = std::string(a) + b; 如果您的系统有asprintf()(现在非常常见),那么它很容易: char*

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

char* a="Heli";
char* b="copter";
如何将它们连接到一个字符c,该字符c应等于“直升机”?

或者在C++中使用s.

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

如果您的系统有asprintf()(现在非常常见),那么它很容易:

char* p;
int num_chars = asprintf(&p, "%s%s", a, b);
第二个参数是类似于
printf()
的格式字符串,因此可以混合使用常量文本、整数、双精度等,控制字段宽度和精度、填充字符、对齐方式等。。如果num_chars!=-1(错误),然后
p
指向可使用
free()
释放的堆分配内存。使用
asprintf()
可以避免自己计算所需缓冲区大小的相对冗长和容易出错的步骤

在C++中:

std::string foo(a);
std::string bar(b);
std::string result = foo+bar;
std::string result = std::string(a) + b;
注意:
a+b
添加了两个指针-这不是您想要的,因此
+
操作符的至少一侧需要看到
std::string
,这将确保使用特定于字符串的连接操作符


(strncat的公认答案值得进一步评论:它可以用于在现有可写缓冲区中的ASCIIZ字符串之后连接更多文本数据,因为该缓冲区有空闲空间。您无法安全/可移植地连接到字符串文本,创建这样的缓冲区仍然是一件痛苦的事情。如果您使用g
malloc()

你想用C++或C++来做吗?用一个代码> char */CODE来指出一个字符串文字是不明智的:字符串文字的内容是不可修改的,所以使用<代码> const char */COD>是一个好主意。(在C字符串文字中,类型是<代码> char [n] < /代码>,在C++中,它们属于类型<代码> const char [n]。
,但在这两种语言中,您都可以在字符串文本中隐式地获得
char*
,这是为了向后兼容真正的旧代码。)这是您要寻找的术语。正如Tony指出的,您不能将其称为
strncat(“Hello”,“world\n”,6)
。您需要很多额外的函数。我认为
asprintf()
返回打印的字节数,如果发生错误,则返回-1,而不是指向已分配内存的指针。类型为
char**
的格式字符串前面应该有一个参数,该字符串是分配给已分配内存的指针的
char*
变量的地址(如果未发生错误)。除非
asprintf()
对于某些库有不同的原型。无论如何,答案是好的和彻底的+1@William哇,我忘了……在C++世界里太久了!会更新…谢谢。在C++中,MalCube()返回一个void*,您正在将其分配给一个char*。这会产生一个错误:“无法从void*转换为char*”。这样的强制转换使其工作:char*r=(char*)malloc(newlen+1)MalOC是C,C中,在分配时不将代码>空格*/COD>转换成另一种类型。在C++中,使用<代码>新< /Cord>运算符,返回一个正确类型的指针。