我正在学习C,我的一个函数(这里没有显示)取决于两个数组是否相同。我有一个数组,我正在尝试生成一个副本,但会发生的是,两个数组在复制后都变成了0。我不知道这是怎么发生的。任何人都可以帮助解释为什么会发生这种情况并提供一个如何做到正确的解决方案?
#include <stdio.h>
int main(){
int array[5]={3,2,7,4,8};
int other_array[5]={0,0,0,0,0};
for (int i=0; i<5; i++) array[i]=other_array[i]; //Copies array into other_array
printf("array is:\n");
for (int j=0; j<5; j++) printf("%d", array[j]);
printf("\nother_array is:\n");
for (int i=0; i<5; i++) printf("%d", other_array[i]);
printf("\n");
return 0;
}
/*
When run this yields
**********************
array is:
00000
other_array is:
00000
*/
答案 0 :(得分:6)
//Copies array into other_array
for (int i=0; i<5; i++) array[i]=other_array[i];
尝试:
other_array[i] = array[i];
赋值运算符将右操作数的值分配给左操作数中的对象。而不是相反。
另外,正如其他答案所说:
printf("\nother_array is:\n");
for (int i=0; i<5; i++) printf("%d", array[i]);
您正在打印array
而不是other_array
。
答案 1 :(得分:2)
您打印错误的数组,打印array
两次
printf("array is:\n");
for (int j=0; j<5; j++) printf("%d", array[j]);
printf("\nother_array is:\n");
for (int i=0; i<5; i++) printf("%d", other_array[i]);//<-- here
printf("\n");
答案 2 :(得分:0)
当然你可以写:
int main(){
int array[] = { 3, 2, 7, 4, 8};
int other_array[] = { 0, 0, 0, 0, 0};
memcpy(other_array, array, sizeof other_array);
/* then print */
}
#include <assert.h>
然后:
assert(sizeof array == sizeof other_array)