C言語学習ポータル(無料版) 学習コンテンツ 関数リファレンス memcpy

🔧 文字列 ・ string.h ・ C89

memcpy の使い方

C言語 標準ライブラリ関数リファレンス(無料公開)

書式

void *memcpy(void *dest, const void *src, size_t n);

どんな関数か

メモリ領域を指定バイト数だけコピーする。文字列に限らずあらゆるデータのコピーに使えstrcpyより高速だが、終端\0の概念が無く、コピー元とコピー先の領域が重なると未定義動作になる。 コンパイラによっては短い固定長のコピーをインライン展開して最適化することも多い高速な関数。

使用例

#include <stdio.h>
#include <string.h>
int main(void) {
    int src[3] = {1, 2, 3};
    int dst[3];
    memcpy(dst, src, sizeof src);
    printf("%d\n", dst[1]);
    return 0;
}

つまずきやすい注意点

⚠️ コピー元とコピー先が重なる領域の場合は未定義動作。重なる可能性があるならmemmoveを使う。

アプリの関数リファレンスで引く(無料・登録不要) 関数一覧へ

memcpy と一緒に使う関数

memmoveメモリ領域を指定バイト数だけコピーする点はmemcpyと同じだが、コピー元とコピー先が重なっていても内部で考慮され正しく… strcpy文字列をコピー先バッファへコピーする。コピー先のサイズを一切考慮しないため、コピー元がコピー先より長いとバッファオーバー…

同じ分類(文字列)の関数

memcmp memmove memset memset_explicit strcat strchr strcmp strcoll strcpy strcspn strdup strerror strlen strncat strncmp strncpy

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る