将单个元素从2D数组复制并比较到C中的另一个数组

时间:2015-03-13 23:11:07

标签: c arrays 2d

char first_array[5][4] = {"aaa","bbb","ccc","ddd","eee"};
char second_array[1][4];

我如何复制first_array中的第三个元素(" ccc")并将其保存到second_array?

下面的语法显然是错误的,但这就是我要求的:

second_array[0] = first_array[2];

此外,复制后,我还想知道如何比较两个数组中的元素。同样,下面的语法可能是错误的,我只是在解释我尝试做的事情:

if(second_array[0] == first_array[2]){ printf("yes"); } //should print yes

2 个答案:

答案 0 :(得分:2)

你不能在c中分配数组,你可以用strcpy()这样的库函数填充数组,所以

second_array[0] = first_array[2];

将是

strcpy(second_array[0], first_array[2]);
但是,您必须确保目标数组符合您要复制的字符数。

如果您尝试比较c中的两个字符串,则无法通过==运算符执行此操作,因为c中的字符串是char的数组,其中包含非{{1}的序列字符后跟一个nul字符,所以如果你写这个

nul

即使您成功复制数据,结果也很可能是错误的,因为您没有比较数组的内容,而是比较它们的地址,因此为了正确地比较它们,还有一个函数if (second_array[0] == first_array[2]) 那么比较字符串的正确方法是

strcmp()

上述函数要求您包含if (strcmp(second_array[0], first_array[2]) == 0) 标题,并且传递的字符串是c语义中的字符串,即我上面描述的内容。

答案 1 :(得分:-1)

我最近也尝试这样做:无法在C 中进行此类直接分配。

当您编写first_array[0]时,编译器会将其读作指向first_array[2]的第一个元素(字符)的地址,而不是整个字符串。当你运行赋值时,如果它可以工作,它只会设置第一个字符。

最简单的方法是使用strncpymemcpy(或循环来循环播放字符串。