2011-02-13 84 views
3

如何连接到char *字符串到彼此。 例如:连接字符*

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

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

+6

你想用C或C++来做到这一点吗? – 2011-02-13 16:01:12

+2

使用`char *`指向字符串文字是不明智的:字符串文字的内容不可修改,所以使用`const char *`是个好主意。 (在C字符串中,文字的类型为char [N],在C++中它们的类型为const char [N],但是在两种语言中,都可以隐式地向字符串文字中获得一个'char *向后兼容真正的旧代码。) – 2011-02-13 16:03:44

+0

** [Concatenation](http://en.wikipedia.org/wiki/Concatenation)**是您正在寻找的术语。 – meagar 2011-02-13 16:06:17

回答

8

strncat

或者使用string秒。

+1

正如Tony所言,你不能称之为`strncat(“Hello”,“world \ n”,6)`。你需要一些额外的功能。 – MSalters 2011-02-14 10:17:26

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

在C++:

std::string foo(a); 
std::string bar(b); 
std::string result = foo+bar; 
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()。)

可以安全/可移植地连接到字符串文字上,并且创建这样的缓冲区仍然很痛苦。