重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

C言語(C++含む)とDXライブラリを用いてゲームプログラミングを行っています。初心者です。
今回、3次元配列をファイルとして出力したい。と下のようなプログラムを組んでみました。

しかし、上手くいきません。具体的に言うなら、配列の中身が最初の4つは訳の分からないものになり、残りは0で埋め尽くされてしまいます。
私としては、0か2、で埋め尽くされて欲しいのですが上手くいきません。

バイナリエディタで中身を覗いてみると、#include "Dxlib.h"なんて書いてある行があります。
これはおそらく、fwriteの使い方を間違っているんじゃないだろうか。なんて思って色々やってみたのですが、上手くいかないようです。

ここが間違っているのかそうでないのか、が未だにはっきりと分からないため、行き詰ってしまった感じがあります。
下のプログラムで間違っている箇所がありましたら、どこがどう間違っているのかと指摘して貰えると助かります。よろしくお願いします。

#include "Dxlib.h"

int save_map(){

int map_yama_1[50][50][10]={0};
int map_yama_f1[50][50][10]={0};

/***** ランダムマップ生成 *****/

static int map_sakusei = 0; //ランダムマップを生成し終えているか、否か

if ( map_sakusei ==0 ){
for (int a=0;a<50;a++){
for (int b=0;b<50;b++){
for (int c=0;c<10;c++){

map_yama_1[a][b][c] = GetRand(2);

if (map_yama_1[a][b][c] == 1)
map_yama_1[a][b][c] = 2;

}
}
}


FILE *fp = fopen("map_01.dat","wb");

if( fp == NULL ){ // NULLが返ってきたらエラー発生
return 0;
}

fwrite( map_yama_1, sizeof(map_yama_1), 1, fp );
//fwrite( map_yama_1, sizeof(int), 50*50*10, fp );

fclose(fp);


}

/***** map_yama_1作成終了 *****/

return 0;
}

A 回答 (2件)

すくなくとも、提示された部分に大きな間違いは無さそうだし、実際実行してバイナリエディタで見ても 00 と 02 だけで意味のある文字列などは出てきません。



これに
int main() {
save_map() ;
return 0;
}
を付けただけのテスト用プログラムを実行したらどうなりますか?
    • good
    • 1
この回答へのお礼

あ、そうやってテストすればいいんですね。何故思いつかなかったのか・・・。
確かにこちらでも0と2のみのきちんとしたファイルが作成されました。どうやら別の場所が悪さをしているようです。

他の箇所のチェックをしてみたいと思います。ありがとうございました!

お礼日時:2013/09/27 05:57

先頭16バイトとかでもよいので具体的にどのようなデータが出力されているのか書きませんか?

    • good
    • 0
この回答へのお礼

返答が遅くなり申し訳ありませんでした。

おそらくですが、初期化されていないアドレスを書き込んでいる、もしくは、上で書いてあるように #include "Dxlib.h"、なんていうファイルに出力する気のない文字列を書き込んでしまっているようです。

お礼日時:2013/09/27 05:57

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