【问题标题】:Copying of array leads to 0's? [closed]数组的复制导致0? [关闭]
【发布时间】:2013-04-14 16:51:28
【问题描述】:

我正在学习 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
*/

【问题讨论】:

    标签: c arrays copying


    【解决方案1】:
    //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

    【讨论】:

    • 哦,对了,我把作业弄反了。谢谢你,我花了这么长时间!
    【解决方案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");
    

    【讨论】:

      【解决方案3】:

      当然你可以写:

      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 &lt;assert.h&gt; 也可能是个好主意,然后:

      assert(sizeof array == sizeof other_array)
      

      【讨论】:

        猜你喜欢
        • 2015-06-22
        • 1970-01-01
        • 2011-11-04
        • 1970-01-01
        • 2018-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多