😸

[C] memmove 関数

に公開

機能

2つのメモリ領域を重なりに注意して安全にコピーする関数[1]

使用例

abcdecf と表示する

\n は改行を表す エスケープシーケンス[2]

コード

char str[] = "abcdef";
memmove(str + 3, str, 3);
printf("%s\n", str);
全文
#include <stdio.h>
#include <string.h>
void main() {
    char str[] = "abcdef";
    memmove(str + 3, str, 3);
    printf("%s\n", str);
}

実行結果

abcabcf

配列内の要素をずらす

コード

int arr[] = {1, 2, 3, 4, 5};
memmove(arr + 1, arr, 4 * sizeof(int));
for(int i = 0; i < 5; i++) printf("%d ", arr[i]);
printf("\n");
全文
#include <stdio.h>
#include <string.h>
void main() {
    int arr[] = {1, 2, 3, 4, 5};
    memmove(arr + 1, arr, 4 * sizeof(int));
    for(int i = 0; i < 5; i++) printf("%d ", arr[i]);
    printf("\n");
}

実行結果

1 1 2 3 4 
脚注
  1. memcpyと似ているが、メモリ領域が重なっている場合も安全に動作する。 ↩︎

  2. 改行やタブなど、画面に表示されない制御文字のこと。 ↩︎

Discussion