在不同的场景中,将阵列复制到另一个阵列最具防弹性和优雅的方法是什么?

时间:2012-11-22 14:46:00

标签: c arrays

在我发现这个非常有用的Q / A:How to initialize all members of an array to the same value?之后,我开始想知道,如果我在C中如何在数组之间交换数据的问题存在等效问题。

这些是我最感兴趣的一些案例:

  1. 相同类型的相同类型,具有相同的大小(例如char到char)
  2. 一种类型到另一种,具有相同的大小(例如const char到unit8)
  3. 较小的一个变成一个较大的一个(例如测试[7]测试[70])
  4. 我对上述方法的方法就是这样 - 例如:

    1. array1 = array2
    2. memcpy(&array2,array1,sizeof(array1))
    3. eighter memcpy,或for for循环元素
    4. 我希望这里有人可以提供或知道在哪里找到一个精细的蒸馏示例 - 不同的数组交换例程的集合。不是,我不能让它自己工作,只是,如果解决方案是稳定的,那就是这种持续的不安全感。

      哦,我真的讨厌那些for循环,分别分配每个元素。对我来说,使用它们的唯一原因是在进行交换之前需要一些额外的处理 - 例如首先递增转移的值,或类似的东西。

      如果这与Q / A-Style不相符,我会很高兴,如果有人可以确认或改进我的尝试,例如2:

      #define SIZEOF_ARRAY = 16;
      
      uint8 array2[SIZEOF_ARRAY+1];
      const char array1[SIZEOF_ARRAY+1] = {"test"};
      
      memcpy(&array2,array1,sizeof(array1))
      

1 个答案:

答案 0 :(得分:4)

首先,您的案例1没有意义,您无法复制到const数组。这是不变的。

然后,你的代码为第二种情况的两个挑剔:

  1. 在这种情况下,数组名称会衰减为指向第一个元素的指针,因此不需要&
  2. sizeof不是函数,因此不需要括号。
  3. 因此:

    memcpy(array2, array1, sizeof array2);
    

    请注意,执行此操作有点危险,您必须确保尺寸确实匹配。