このエントリーをはてなブックマークに追加


メモリの内容を指定した値で初期化する・memset

指定したメモリ番地から指定したサイズ分を指定した値で初期化するmemset関数のC言語サンプルソースを以下に記します。


スポンサーリンク

関連記事

memsetの書式等

  • 必要なインクルードファイル
    #include <string.h>
  • memsetの書式
    void *memset(void *s, int c, size_t n);
  • 戻り値
    なし
  • 引数
    1つ目: 初期化する先頭番地(バッファのポインタになると思います。)
    2つ目: 初期化する値
    3つ目: 初期化するサイズ

memsetを使用したC言語サンプルコード

以下にmemsetを使用して初期化前、0で初期化後、123で初期化後の実行例を記します。 filememset.c (改行コードLF)

#include <stdio.h>
#include <string.h>

struct INT_MEMBERS {
    int a;
    int b;
    int c;
};

int main(void)
{
    struct INT_MEMBERS int_members;
    printf("int_members.a = %d\n", int_members.a);
    printf("int_members.b = %d\n", int_members.b);
    printf("int_members.c = %d\n", int_members.c);

    printf("memset(&int_members, 0, sizeof(int_members))\n");
    memset(&int_members, 0, sizeof(int_members));
    printf("int_members.a = %d\n", int_members.a);
    printf("int_members.b = %d\n", int_members.b);
    printf("int_members.c = %d\n", int_members.c);

    printf("memset(&int_members, 123, sizeof(int_members))\n");
    memset(&int_members, 123, sizeof(int_members));
    printf("int_members.a = %d\n", int_members.a);
    printf("int_members.b = %d\n", int_members.b);
    printf("int_members.c = %d\n", int_members.c);

    return 0;
}

以下に上記のC言語サンプルコードをコンパイルし実行した時の出力を記します。

$ gcc memset.c -o memset
$ ./memset 
int_members.a = -1216453232
int_members.b = 134514091
int_members.c = -1216614412
memset(&int_members, 0, sizeof(int_members))
int_members.a = 0
int_members.b = 0
int_members.c = 0
memset(&int_members, 123, sizeof(int_members))
int_members.a = 2071690107
int_members.b = 2071690107
int_members.c = 2071690107

初期化した値の0になっていることが確認できます。
しかし、123で初期化した値は期待した123になっていません。
これはバイト単位で123という値がセットされるためです。
使用するときは注意しましょう。

以上、memsetのC言語サンプルコードと実行例でした。


スポンサーリンク

添付ファイル: filememset.c 517件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 21:01:00