banruのブログ

不定期更新

memcpyについて

C言語のstring.hにmemcpyというものがあります。
下のはArm GNU Toolchainのもの

void *   memcpy (void *__restrict, const void *__restrict, size_t);

これは1つ目の引数に2つの目の引数を3つ目の引数のバイト数コピーするもので,
3つ目の引数はコピーする配列数じゃないです(知らなかった) 例えば

uint16_t buf1[5] = {};
uint16_t buf2[5] = {1,1,1,1,1};
memcpy(buf1,buf2,5)

としてもbuf1の配列が持つ要素とbuf2の配列が持つ要素が同じになりません。
したがって,

uint16_t buf1[5] = {};
uint16_t buf2[5] = {1,1,1,1,1};
memcpy(buf1,buf2,5*sizeof(uint16_t))

としましょう。