2010-07-24 84 views
15

如果我有两个字符数组,像这样:连接两个char数组?

char one[200]; 
char two[200]; 

然后我想使其中三分之一连接这些我怎么能这样做呢?

我曾尝试:

char three[400]; 
strcpy(three, one); 
strcat(three, two); 

但这似乎并没有工作。它如果onetwo都设置这样的:

char *one = "data"; 
char *two = "more data"; 

任何人有任何想法如何解决这一问题?

谢谢

+1

以及长第一个工作应该作为首先要将一个字符串数组。你刚刚指定了字符串可以多久,没有分配任何值。 – Chris 2010-07-24 11:06:45

+1

他们是字符数组还是字符串?字符串是一个特殊约定的char数组,它必须存在并指示字符串的结尾。 要复制普通的非字符串字符数组,请使用'memmove'。 – 2010-07-24 11:07:02

+0

顺便说一句,如果你真的是字符串,那么'399'就足够了'three'的大小。 – 2010-07-24 11:08:48

回答

7

如果“一”和“二”不包含“\ 0”结尾的字符串,那么你可以使用这个:

memcpy(tree, one, 200); 
memcpy(&tree[200], two, 200); 

这会将所有字符复制来自一个和两个不顾字符串终止符“\ 0”

+0

记忆?当然,你的意思是memcpy,是吗?没关系,我会自己修复它:-) – paxdiablo 2010-07-24 11:08:01

+0

他们包含字符抱歉,我应该提到这一点。 – 2010-07-24 11:08:11

+0

@Pascal Cuoq:定义在string.h中 – 2010-07-24 11:12:20

4

strcpy希望数组以'\ 0'结尾。字符串在C中被零终止。这就是为什么第二种方法起作用,而第一种则不起作用。

+0

我宁愿说'\ 0',还是我错了?零与空字符(NUL)不同。 – 2010-07-24 13:12:23

+0

是的,当然。逃生在某处丢失:-) – EricSchaefer 2010-07-24 13:36:02

0

您可以轻松地用sprintf

char one[200] = "data"; // first bit of data 
char two[200] = "more data"; // second bit of data 
char three[400]; // gets set in next line 
sprintf(three, "%s %s", one, two); // this stores data 
+0

这相当于OP的非工作'strcpy' /'strcat'代码(除了它也增加了一个空格)。它不回答任何问题。 – melpomene 2017-03-18 10:57:31

+0

@melpomene nope。这并不是平等的。它设置了三对一和两个连接在一起。它的工作原理。我曾多次使用它,它使我获得了成功。所以不要粗鲁,并接受这是一个很好的工作答案! – OverloadedCore 2017-03-18 12:16:36

+0

“*它设置三对一和两个连接在一起,并且工作。*” - 就像OP的代码一样。它如何不等同于'strcpy(三,一); strcat(三,二);'? – melpomene 2017-03-18 14:31:07