gpt4 book ai didi

c - 在不同情况下将数组复制到另一个数组的最可靠和优雅的方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 01:36:28 25 4
gpt4 key购买 nike

在我发现这个非常有用的问答之后:How to initialize all members of an array to the same value? , 我想知道,是否有一个等价物可以解决我在 C 中如何在数组之间交换数据的老问题。

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

  1. 相同类型到相同类型,大小相同(例如 char 到 char)
  2. 一种类型到另一种,大小相同(例如 const char 到 unit8)
  3. 小的变成大的(例如 test[7] 到 test[70])

我对上述那些人的方法是这样的——例如:

  1. array1 = array2
  2. memcpy(&array2,array1,sizeof(array1))
  3. 还有八个 memcpy,或者一个遍历元素的 for 循环

我希望这里有人可以提供或知道在哪里可以找到不同数组交换例程的精炼示例集合。这并不是说我不能让它自己发挥作用,只是,如果解决方案是可靠的,就会存在这种持续的不安全感。

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

如果这不适合 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 没有意义,您无法复制到 const 数组。它是恒定的。

然后,对于第二种情况,你的代码有两个问题:

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

因此:

memcpy(array2, array1, sizeof array2);

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

关于c - 在不同情况下将数组复制到另一个数组的最可靠和优雅的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13515117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com