memcpy

n バイトメモリブロックのコピー

【書式】
#include <string.h>
void *memcpy(void *buf1, const void *buf2, size_t n);

※ void * についてはこちらを参考

【説明】
buf2 の先頭から n 文字分を、buf1へコピーします。このとき、strcpy()と異なり空文字('\0')を付加することはありません。また、buf2 を単なるメモリブロックとして扱うため、途中に空文字('\0')を含んでいてもコピーを続けます。
buf1 と buf2 が重なっているときの動作は未定義です。この場合、memmove() では正しくコピーが行われます。

【引数】
void *buf1 : コピー先のメモリブロック
const void *buf2 : コピー元のメモリブロック
size_t n : コピーバイト数

【戻り値】
buf1の値

【使用例】
#include        <stdio.h>
#include        <string.h>

int main(void)
{
        char str1[128] = {1,1,1,1,1,1,1};
        char str2[] = "ab\0cde";        /* 途中に空文字のある文字列 */
        int i;
        
        printf("コピー前 中身の確認\n");
        for (i=0; i<7; i++)
                printf("%#x ",str1[i]);
        printf("\n");
        
        memcpy(str1, str2, 5);

        printf("コピー後 中身の確認\n");
        for (i=0; i<7; i++)
                printf("%#x ",str1[i]);
        printf("\n");

        return 0;
}

【実行結果】
コピー前 中身の確認
0x1 0x1 0x1 0x1 0x1 0x1 0x1 
コピー後 中身の確認
0x61 0x62 0 0x63 0x64 0x1 0x1 

※ 途中に '\0' があってもコピーできる。
  また、最後に '\0' を不可しない。

戻る


banner
初心者のためのポイント学習C言語」
Copyright(c) 2000-2004 TOMOJI All Rights Reserved