【C言語】初期化に使うmemset関数の使い方を詳しく解説

目次から探す

memset関数の注意点

memset関数は、C言語でメモリを特定の値で初期化するために使用される便利な関数です。

しかし、使用する際にはいくつかの注意点があります。

以下では、memset関数の注意点について説明します。

ポインタの扱いに注意する

memset関数は、メモリの先頭アドレスを指定するポインタを引数として受け取ります。

ポインタはメモリ上の特定の場所を指し示すため、正しく指定する必要があります。

ポインタの値を間違えると、意図しないメモリ領域を書き換えてしまう可能性があります。

例えば、以下のコードでは、配列の先頭アドレスを指定してmemset関数を使用しています。


#include <stdio.h>
#include <string.h>
int main() {
    int array[5] = {1, 2, 3, 4, 5};
    memset(array, 0, sizeof(array));
    for (int i = 0; i < 5; i++) {
        printf("%d ", array[i]);
    }
    return 0;
}

このコードでは、配列arrayの先頭アドレスをmemset関数に渡して、配列の要素を全て0で初期化しています。

正しくポインタを指定しているため、出力結果は0 0 0 0 0となります。

メモリの範囲外へのアクセスに注意する

memset関数は、指定したメモリ領域を特定の値で埋めるため、メモリの範囲外にアクセスすると予期しない結果が生じる可能性があります。

メモリの範囲外へのアクセスは、プログラムの安定性やセキュリティに悪影響を及ぼす可能性があるため、注意が必要です。

以下の例では、文字列の先頭アドレスを指定してmemset関数を使用しています。


#include <stdio.h>
#include <string.h>
int main() {
    char str[5] = "Hello";
    memset(str, 'A', 10);
    printf("%s", str);
    return 0;
}

このコードでは、文字列strの先頭アドレスをmemset関数に渡して、文字列全体を文字’A’で埋めています。

しかし、strのサイズは5バイトであり、memsetで初期化しようとしている文字列の長さは10バイトです。

したがって、memset関数はメモリの範囲外にアクセスしてしまいます。

このような場合、予期しない結果が生じる可能性があります。

例えば、出力結果がAAAAAloのようになるか、プログラムが異常終了するかもしれません。

以上がmemset関数の注意点です。

ポインタの扱いやメモリの範囲外へのアクセスに注意し、適切に使用するようにしましょう。

1 2 3

この記事のページ一覧
  1. 現在のページ
目次から探す