web-dev-qa-db-ja.com

C ++でのmemcpyの使用

memcpy 関数のパラメーターについて少し混乱しています。私が持っている場合

int* arr = new int[5];

int* newarr = new int[6];

arrの要素をnewarrを使用してmemcopyにコピーします。

memcpy(parameter, parameter, parameter)

どうすればよいですか?

9
DSP_Student

したがって、順序はmemcpy(destination, source, number_of_bytes)です。

したがって、古いデータをnewarrの先頭に配置するには、

memcpy(newarr, arr, 5 * sizeof *arr);
/* sizeof *arr == sizeof arr[0]  == sizeof (int) */

または最後に

memcpy(newarr+1, arr, 5 * sizeof *arr);

arrnewarrのデータ型がわかっているため、ポインター演算が機能します。ただし、memcpyの内部ではタイプがわからないため、バイト数を知る必要があります。

別の代替手段はstd::copyまたはstd::copy_nです。

std::copy_n(arr, 5, newarr);

intのような基本的なタイプの場合、memcpyによって行われるビット単位のコピーは正常に機能します。実際のクラスインスタンスの場合、std::copy(またはcopy_n)を使用して、クラスのカスタマイズされた代入演算子を使用する必要があります。

23
Ben Voigt
memcpy(dest,src,size)
dest -to which variable 
src - from which variable
size - size of src varible

int* arr = new int[5];    //source
int* newarr = new int[6];  // destination

for(int i = 0;i<5;i++) {arr[i] = i * 3;printf("  %d  ",arr[i]);}
memcpy(newarr,arr,sizeof(int)* 5);
for(int i = 0;i<5;i++) printf("%d",newarr[i]);
1
Pratap