在C编程中将2个数组复制到1个数组中

如何将2个单独的2D数组复制到1个数组中,我在下面描述了我的意思:

我有一个数组:a,b,c我有第二个数组:d,e,f

我希望第三个数组同时具有上述数组:第三个数组:a,b,c,d,e,f

到目前为止,我的代码只是获取两个数组的值,并在打印第三个数组时注释掉:

#include  #include  #include  int main(){ int i,j,count; char ar1[3][10]={"a","b","c"}; char ar2[3][10]={"d","e","f"}; char ar3[6][10]; for (i=0;i<3;i++){ printf("%s\n",ar1[i]); } for (i=0;i<3;i++){ printf("%s\n",ar2[i]); } printf('new array:\n'); // for (i=0;i<6;i++) // printf("%s\t\n",ar3[i]); } 

由于数组的最右侧维度相同,因此将两个数组复制到一个中的最简单方法如下

 #include  #include  int main(void) { char ar1[3][10] = { "a", "b", "c" }; char ar2[3][10] = { "d", "e", "f" }; char ar3[6][10]; memcpy( ar3, ar1, sizeof( ar1 ) ); memcpy( ar3 + 3, ar2, sizeof( ar2 ) ); for ( size_t i = 0; i < 6; i++ ) { puts( ar3[i] ); } return 0; } 

输出是

 a b c d e f 

另一种方法是使用函数strcpy分别复制每个字符串

 #include  #include  int main(void) { char ar1[3][10] = { "a", "b", "c" }; char ar2[3][10] = { "d", "e", "f" }; char ar3[6][10]; size_t j = 0; for ( size_t i = 0; i < 3; i++, j++ ) { strcpy( ar3[j], ar1[i] ); } for ( size_t i = 0; i < 3; i++, j++ ) { strcpy( ar3[j], ar2[i] ); } for ( size_t i = 0; i < 6; i++ ) { puts( ar3[i] ); } return 0; } 

输出与上面相同

 a b c d e f 

不会是这样的

 for (i=0;i<3;i++){ ar3[i][0] = ar1[i][0]; } for (i=0;i<3;i++){ ar3[i+3][0] = ar2[i][0]; } 

根据人们的评论,它似乎就像这样。 问题:有没有办法我不必指定“i + 3”即我可以将2个数组加在一起吗? 所以它直接打印1个接一个

 #include  #include  #include  int main() { int i,j,count; char ar1[3][10]={"a","b","c"}; char ar2[3][10]={"d","e","f"}; char ar3[6][10]; for (i=0;i<3;i++){ printf("%s\n",ar1[i]); strcpy(ar3[i],ar1[i]); } for (i=0;i<3;i++){ printf("%s\n",ar2[i]); strcpy(ar3[i+3],ar2[i]); } // printf('new array:\n'); for (i=0;i<6;i++) printf("%s\t\n",ar3[i]); }