Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 连接两个字符数组?_C_String_String Concatenation - Fatal编程技术网

C 连接两个字符数组?

C 连接两个字符数组?,c,string,string-concatenation,C,String,String Concatenation,如果我有两个这样的字符数组: char one[200]; char two[200]; 然后我想做第三个,连接这些,我怎么能做到呢 我试过: char three[400]; strcpy(three, one); strcat(three, two); 但这似乎不起作用。如果one和two按如下方式设置,则会执行此操作: char *one = "data"; char *two = "more data"; 有人知道怎么解决这个问题吗 谢谢strcpy希望数组由'\0'终止。字符串在

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

char one[200];
char two[200];
然后我想做第三个,连接这些,我怎么能做到呢

我试过:

char three[400];
strcpy(three, one);
strcat(three, two);
但这似乎不起作用。如果
one
two
按如下方式设置,则会执行此操作:

char *one = "data";
char *two = "more data";
有人知道怎么解决这个问题吗


谢谢

strcpy希望数组由'\0'终止。字符串在C中以零结尾。这就是为什么第二种方法有效而第一种方法无效。

如果“一”和“二”不包含以“\0”结尾的字符串,则可以使用以下方法:

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

这将从一个和两个忽略字符串终止字符'\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'
必须存在并指示字符串的结尾。要复制普通的非字符串字符数组,请使用
memmove
。顺便说一句,如果你真的是指字符串,那么
399
对于
3
的大小就足够了@Pascal Cuoq:No 399是不够的,如果一个和两个包含字符而不是以“\0”结尾的字符串(只是一些数据)。@Martin你认为“如果你真的是指字符串”这个短语吗还不够清楚吗?我该说什么?记忆?你是说memcpy,是吗?没关系,我会自己解决:-)它们包含字符抱歉我应该提到这些。@Pascal Cuoq:在string中定义。hI不知道在这个答案中“忽略字符串终止字符'\0''”的含义。当然,
one
two
中的任何零都会被
memcpy
复制@Pascal Cuoq:我的意思是,memcpy不会像strcpy那样在遇到“\0”时停止。我的回答可能不太清楚我宁愿说“\0”,还是我错了?零与空字符(NUL)不同。这相当于OP的非工作
strcpy
/
strcat
代码(除了它还添加了一个空格)。它不回答任何问题。@melpomene不回答。这并不等同于此。它将三比一和二结合在一起。它是有效的。我用过很多次,它给我带来了成功。因此,不要对它无礼,并接受这是一个很好的工作答案!“它将三对一和二结合在一起。它是有效的。”-就像OP的代码一样。它如何不等同于strcpy(三,一);strcat(三,二)?@melpomene它不是等效的,因为它工作,而另一个不/仅适用于指针。如果这是一个有效的答案,你不应该投反对票。你错了,但我不明白到底是怎么回事。如果你不相信我,试试看
charone[200]=“data”;char two[200]=“更多数据”;char-three[400];strcpy(三,一);strcat(三,二);printf(“%s\n”,三个)。你的评论“只适用于指针”对我来说毫无意义。