Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在不同的场景中,将一个阵列复制到另一个阵列的最可靠、最优雅的方法是什么?_C_Arrays - Fatal编程技术网

C 在不同的场景中,将一个阵列复制到另一个阵列的最可靠、最优雅的方法是什么?

C 在不同的场景中,将一个阵列复制到另一个阵列的最可靠、最优雅的方法是什么?,c,arrays,C,Arrays,在我发现这个非常有用的Q/A:,我开始怀疑,对于我在C中经常遇到的如何在数组之间交换数据的问题,是否有一个等价物 以下是我最感兴趣的一些案例: 相同类型到相同类型,大小相同(例如字符到字符) 一种类型转换为另一种类型,大小相同(例如,const char转换为unit8) 将较小的转换为较大的(例如测试[7]到测试[70]) 我的上述方法如下-例如: array1=array2 memcpy(&array2,array1,sizeof(array1)) 第十八个rmemcpy也是,或者通过元素的

在我发现这个非常有用的Q/A:,我开始怀疑,对于我在
C
中经常遇到的如何在数组之间交换数据的问题,是否有一个等价物

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

  • 相同类型到相同类型,大小相同(例如字符到字符)
  • 一种类型转换为另一种类型,大小相同(例如,const char转换为unit8)
  • 将较小的转换为较大的(例如测试[7]到测试[70])
  • 我的上述方法如下-例如:

  • array1=array2
  • memcpy(&array2,array1,sizeof(array1))
  • 第十八个r
    memcpy
    也是,或者通过元素的for循环
  • 我希望这里的人能够提供,或者知道在哪里可以找到,一个不同数组交换例程的精练示例集合。不是,我不能让它自己工作,只是,如果解决方案是可靠的,就会有这种持续的不安全感

    哦,我真的很讨厌那些循环,分别分配每个元素。对我来说,使用它们的唯一原因是在执行呼气之前需要进行一些额外的处理-例如,首先增加转移值,或者类似的事情

    如果这不符合Q/A风格,我会很高兴,如果有人能确认或改进我的尝试,例如2号:

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

    首先,您的案例1没有意义,无法复制到
    const
    数组。它是恒定的

    然后,对第二种情况的代码进行两次挑剔:

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


    请注意,这样做有点危险,您必须确保大小确实匹配。

    首先,案例1没有意义,您不能复制到
    常量
    数组。它是恒定的

    然后,对第二种情况的代码进行两次挑剔:

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


    请注意,这样做有点危险,您必须确保尺寸确实匹配。

    感谢
    const
    的提示,更正了它。您的简化形式非常好,在我的例子中,我确信它的大小,但是这样的代码不应该总是被保护以防止不好的使用吗?你自己会用另一种方法来达到同样的效果吗?感谢
    const
    的提示,更正了它。您的简化形式非常好,在我的例子中,我确信它的大小,但是这样的代码不应该总是被保护以防止不好的使用吗?您自己是否会使用其他方法来实现相同的结果?是否可以通过指针而不是memcpy来使用setup array2到array1值?我猜不是,因为array1是常量。是这样吗?是否可以通过指针而不是memcpy使用setup array2到array1值?我猜不是,因为array1是常量。是这样吗?
    memcpy(array2, array1, sizeof array2);