2011-02-13 34 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()。)

可以安全/可移植地連接到字符串文字上,並且創建這樣的緩衝區仍然很痛苦。