アプリ版:「スタンプのみでお礼する」機能のリリースについて

fread(void *バッファ,site_t サイズ,size_t 数値,FILE *ストリーム)のようなものがありますが「サイズ」と「数値」とはどのように求めるのでしょうか。
あと、void型のポインタのことがわかりません。

A 回答 (4件)

例えば


char data[100] ;
とした data 全部をfreadで読む/fwriteで書く場合

バッファはdataの先頭なので data でいいです。型をあわせるために (void *)data と書いてもよいでしょう。
サイズは data の一個一個の大きさです。char型なので sizeof(char) になります。
数値はその個数なので、宣言から 100 になります。

例えば
int data2[1000];
の200番目から30個に読み込むなら
fread( & ( data2[200] ) , sizeof(int), 30 , fp );
ですし
short s ;
に読みこむなら、sの領域に1個読み込む、と考えて
fread( &s , sizeof(short), 1, fp );
です。

この回答への補足

ありがとうございました。
たとえば、という話がとてもわかりやすくて
理解できました。

補足日時:2010/01/31 17:50
    • good
    • 0

質問の"サイズ"/"数値"の表現を使うと、一般には、


サイズ:オブジェクトのサイズ(バイト数)
数値:オブジェクトの個数
です。

注意すべきは、fread/fwriteは戻り値として実際に読み書きしたオブジェクトの個数を返すということです。
100Byteのcharの配列の読み書きを行う場合、
char buf[100];
int n = fread(buf, 1, sizeof buf, fp);
とすると、nはsizeof bufより小さな値が返る事があり、続きから再度読み込む処理が必要になります。

int n = fread(buf, sizeof buf, 1, fp);
とすると、戻り値で1(成功)か0(失敗)を判断することができます。
    • good
    • 0
この回答へのお礼

ありがとうございました!

お礼日時:2010/01/31 17:52

どこから始まる


大きさいくつの領域を
何個分
読むか、を指定します。

大きさいくつ、がサイズに、何個分、が数値に、それぞれ相当します。
どこから始まる、というのは何かのアドレスを示すのですが、
どんな型のアドレスにも対応できるよう、void *となっています。
char *やint *に決めうちするわけにはいきませんからね。
    • good
    • 0

void*とは「どんな型へのポインタでもOK」というものです。


つまり int*でもchar*でも何でもいいですよと言う意味です。

サイズは通常sizeofを使用します。
数値は、特に何も考えなければ 1 でよいのではないでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!