c - memcpy(),size参数的值应该是多少?

标签 c arrays sizeof memcpy

我想将一个 int 数组复制到另一个 int 数组。它们使用相同的长度定义,因此它们的长度始终相同。

memcpy() 的大小参数的以下两种替代方案的优缺点是什么?

memcpy(dst, src, ARRAY_LENGTH*sizeof(int));

memcpy(dst, src, sizeof(dst));

第二个选项总是有效吗?不管内容如何?

支持最后一个的一件事是,如果数组要更改,更新 memcpy() 将是一些内务处理。

最佳答案

只要将 dst 声明为具有大小的数组,sizeof 就会返回该数组的大小(以字节为单位):

int dst[ARRAY_LENGTH];

memcpy( dst, src, sizeof(dst) ); // Good, sizeof(dst) returns sizeof(int) * ARRAY_LENGTH

如果 dst 恰好是指向此类数组第一个元素的指针(与数组本身的类型相同),它将无法工作:

int buffer[ARRAY_LENGTH];
int* dst = &buffer[0];

memcpy( dst, src, sizeof(dst) ); // Bad, sizeof(dst) returns sizeof(int*)

关于c - memcpy(),size参数的值应该是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2681061/

相关文章:

C Malloc 运行时错误

来自麦克风的连续语音识别 pocketsphinx

c - 如何对 C 中数组中的值运行循环?

python - 将 Mergesort 用于一组未排序的单词

c - 通过客户端服务器方法写入和读取共享内存以获取数字的平方

arrays - 创建一个常量字符串数组

c - 当 p 指向一个数组(int)索引时, '-1[p]' 是什么?

c++ - 使用运算符大小初始化数组?

c - sizeof 运算符在以下代码片段中的行为如何?

c - 在编译时查看结构体元素的大小?