我想将一个 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/