【问题标题】:Concatenate two char arrays?连接两个字符数组?
【发布时间】:2010-07-24 11:01:51
【问题描述】:

如果我有两个这样的 char 数组:

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

然后我想制作第三个将这些连接起来我该怎么做?

我试过了:

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

但这似乎不起作用。如果 onetwo 设置如下:

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

有人知道如何解决这个问题吗?

谢谢

【问题讨论】:

  • 第一个应该可以正常工作,只要您先将字符串分配给数组。您刚刚指定了字符串的长度,没有分配任何值。
  • 它们是字符数组,还是字符串?字符串是具有特殊约定的字符数组,'\0' 必须存在并指示字符串的结尾。要复制普通的非字符串字符数组,请使用memmove
  • 顺便说一句,如果你真的是指字符串,那么399 就足够three 的大小了。
  • @Pascal Cuoq:如果 1 和 2 包含字符而不是 '\0' 终止的字符串(只是一些数据),则 399 是不够的。
  • @Martin 你认为“如果你真的是指字符串”这句话不够清楚吗?我应该说什么?

标签: c string string-concatenation


【解决方案1】:

如果 'one' 和 'two' 不包含以 '\0' 结尾的字符串,那么你可以使用这个:

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

这将复制一和二中的所有字符,而忽略以字符“\0”结尾的字符串

【讨论】:

  • 内存?当然你的意思是memcpy,是吗?没关系,我会自己解决的:-)
  • 它们包含字符对不起我应该提到的。
  • @Pascal Cuoq:在 string.h 中定义
  • 我不知道这个答案中“忽略字符串终止字符'\ 0'”的含义是什么。当然,onetwo 中任何位置的任何零都将被 memcpy 复制。
  • @Pascal Cuoq:我的意思是,memcpy 在遇到像 strcpy 那样的 '\0' 时不会停止。我的回答可能不太清楚
【解决方案2】:

strcpy 期望数组以 '\0' 结束。字符串在 C 中以零结尾。这就是为什么第二种方法有效而第一种无效的原因。

【讨论】:

  • 我宁愿说 '\0' 还是我错了?零与空字符 (NUL) 不同。
【解决方案3】:

您可以轻松使用 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

【讨论】:

  • 这相当于 OP 的非工作 strcpy/strcat 代码(除了它还添加了一个空格)。它不回答任何问题。
  • @melpomene 不。这并不等同。它将三对一和二结合在一起。它有效。我用过很多次,它给我带来了成功。所以不要对此无礼并接受这是一个很好的答案!
  • "它将三对一和两个连接在一起。它可以工作。" - 就像 OP 的代码一样。怎么不等于strcpy(three, one); strcat(three, two);
  • @melpomene 它不是等效的,因为它可以工作,而另一个不/仅适用于指针。如果这是一个有效的答案,你不应该投反对票
  • 你错了,但我不明白到底是怎么回事。如果你不相信我,试试char one[200] = "data"; char two[200] = "more data"; char three[400]; strcpy(three, one); strcat(three, two); printf("%s\n", three);。您的评论“仅适用于指针”对我来说没有意义。
猜你喜欢
  • 2012-10-05
  • 1970-01-01
  • 2016-02-24
  • 2013-01-01
  • 1970-01-01
  • 2013-11-05
  • 1970-01-01
  • 2014-06-10
相关资源
最近更新 更多