memset
code:c
int main(void)
{
char num[] = "0123456789";
char num2[] = "0123456789";
memset(num,0,sizeof(num));
memset(num2+2,"x",3);
memset(num3,0,sizeof(num3));
printf("%s\n",num);
//printf("%s\n",num2);
//printf("%d\n",num3);
return 0;
}
このプログラムは、以下のような処理を行っています。
char型の配列numに文字列"0123456789"を格納する。
char型の配列num2に文字列"0123456789"を格納する。
int型の配列num3を宣言し、要素数8に設定する。
配列numに含まれる全ての要素を'x'で埋める。
配列num2の2番目の要素(num22)から3つの要素を'x'で埋める。 配列num3に含まれる全ての要素を0で埋める。
配列num、配列num2、配列num3の値をそれぞれ出力する。
なお、最後のfor文では、num3の全ての要素の値を出力しています。
memsetは、C言語やC++言語で定義されている標準ライブラリの一つで、メモリ領域に指定した値を設定するための関数です。
以下がmemsetの基本的な使い方です。
code:c
void *memset(void *s, int c, size_t n);
上記の関数プロトタイプの引数について説明します。
s: 初期化対象となるメモリブロックの先頭アドレスを指定するポインタ
c: 初期化に用いる値(char型の場合、整数値にキャストされる)
n: 初期化対象となるメモリブロックのバイト数
以下は、memsetの使用例です。
code:c
int main() {
memset(str, 'a', sizeof(str)); // strを'a'で初期化
printf("%s\n", str); // "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" が表示される
return 0;
}
この例では、char型の配列であるstrを'a'で初期化しています。sizeof演算子を用いて、配列strの要素数をバイト数で取得しています。
memsetは、大量のメモリ領域を初期化する場合に有効な関数です。ただし、ポインタの範囲外を初期化してしまうなど、不正なメモリアクセスが発生しないように注意が必要です。