【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード

C言語のfor文について

C言語初心者です。質問させていただきます。
output.datというバイナリファイルに値を書き込みたい(100~149)のですが、どうもうまくいきません。
値が半分だけ正常に入って、あとの半分はおかしな値が入ります。
どなたか分かる方教えていただけないでしょうか。


ソース(一部分)↓
int main(){

int i,j;
char output[456];


//ファイルに値を入れる
for(i=0,j=100;i<456,j<556;i++,j++){
output[i]=j;
}
//バイナリ書き込みモードでファイルをオープン
if((fp = fopen("output.dat","wb")) == NULL)
{
printf("<output.dat> file open error\n");
exit(1);
}
//値をファイルに書き込む
fwrite(output,456,1,fp);

fclose(fp);

exit(0);
}

A 回答 (4件)

char型が扱える数値の範囲は「-128~0~127」(0~255)までです。


それを超えた場合は今回のルーチンでは内容に保証はできません。
    • good
    • 0
この回答へのお礼

なるほど、確かに128から値がおかしくなっていました。
ご回答ありがとうございます!

お礼日時:2010/04/21 14:34

#1さん通り、jの範囲は0~255でなければいけませんよ



>バイナリファイルに値を書き込みたい(100~149)
100~555になっているけど?


こんな感じでしょうか
j=0x00;
for(i=0;i<456;i++)
{
output[i]=j;
j++;

if(256==j)
{
j=0x00;
}
}
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
非常に参考になりました!見本まで書いていただいてとても助かります!

>バイナリファイルに値を書き込みたい(100~149)
私の質問のミスです。

正しくは、「100から555の値を書き込みたい」です。
すみませんでした…。

お礼日時:2010/04/21 14:40

#2です



参考までに裏技です
理解してから使ってくださいね

char j;
j=0x00;
for(i=0;i<456;i++)
{
output[i]=j++;
}
    • good
    • 0
この回答へのお礼

なるほど!参考にさせていただきます。
初心者の私にはありがたいです。
ご回答ありがとうございます!

100から書き込むことは可能なのでしょうか?

お礼日時:2010/04/21 14:46

三度です



j=100;
でいけます
100->255->0->255

あと、バイナリ出力なので、
unsigned charの方がいいですね
    • good
    • 0
この回答へのお礼

三度目のご回答ありがとうございます!!
非常に助かり、参考になりました。

お忙しい中ありがとうございました。

お礼日時:2010/04/21 14:56

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