ページ 11

memset関数について

Posted: 2010年3月09日(火) 23:21
by オレンジ
龍神録を参考にDXライブラリを使ってSTGを作っているのですが
10章の中で出てくるmemset関数の意味がわかりません
初期化をする関数、というのはわかるのですが、なぜ搭載されているのかがわかりません
回答よろしくお願いします

Re:memset関数について

Posted: 2010年3月09日(火) 23:47
by ちゃお
初期化してなかったらエラー起こるから。

たとえば、
#include<stdio.h>

int main(void)
{
int a,b,c;

c = a + b; //a,bを初期化せずにcに代入

printf("%d",c);
return 0;
}
とかしたときに
aとbに値を入れてないのに計算してしまうとおかしな数字が出る(エラーを引き起こす)。

C言語プログラミングにおける基礎だと思います。
だから、初期化しないとだめってこと。

なるほどなるほど

Posted: 2010年3月11日(木) 04:51
by オレンジ
わかりました
初期化って大事ですね
ではmemset関数ってどうやって使うんですか?
それと、判例でよくあるsizeof演算子の意味もよろしくお願いします

Re:なるほどなるほど

Posted: 2010年3月11日(木) 09:37
by tk
memsetは以下の通りです。(MSDNライブラリより)

void *memset( void *dest, int c, size_t count );
dest : 対象となるバッファへのポインタ
c : 設定する文字
count : 文字数

destの最初からcount分、cで初期化するものです。

例)
char str[10];
memset( str, '\0', sizeof( str ) );

これでstrはすべて\0で初期化されます。


ここでsizeof演算子ですが、これはsizeofに渡された型や変数のメモリサイズを調べるものです。

例)
sizeof( char ); // charのサイズ(=1)
sizeof( int ); // intのサイズ
sizeof( double ); // doubleのサイズ(=8)
sizeof( str ); // 上記の例のstr(char10個の配列なので =10)



まだ分からないことがあればリファレンスなり見てください。
以上です。