私は知っています、私は遅れています。しかし、以前の回答を読んだとき、「これらすべての変数は必要ありません」と思いました
あなたの簡単なサンプルで:
int abc[3], def[3]; //abs is destination and def is source
def[3] = {1, 2, 3};
memcpy(abc, def, 3*sizeof(int)); //you can do sizeof(int) as you have here an array of int.
ただし、変数「const int array_size = 3」または「#define ARRAY_SIZE 3」を使用して配列サイズを定義することをお勧めします。次に、「3」を「ARRAY_SIZE」に置き換えるだけで、同じ仕事をしてサイズの間違いを避けることができます。
あなたの本当の問題であなたができること:
#define ARRAY_SIZE 3
typedef int arr_1[ARRAY_SIZE];
arr_1 arr[ARRAY_SIZE+1];//it is useless here
arr_1 *temp = (arr_1 *) malloc(sizeof(arr_1)); //it is your destination, but you have a pointer of array
arr_1 a[ARRAY_SIZE] = {1, 2, 3};//it is your source
//by doing sizeof((*temp)[0])
//you do not care about the type of you array pointer
//you are sure to take the good size --> it fills your array with 0
memset((*temp), 0, (ARRAY_SIZE+1)*sizeof((*temp)[0]));
//same logic
//but you destination is (*temp) because you have a pointer of array
//it means that your array arr and a have the same type
memcpy((*temp), a, ARRAY_SIZE * sizeof(a[0]));
//by the way, the las cell of arr is still 0
//and a pointer is close to an array. If you do "tmp = a;" it works.
//but it is not a copy, you just give the a's reference to tmp