• 締切済み

ファイルの入力がうまくできません。

ファイルの読み込みがうまくできません。 char buffer[起こりうる最大バイト数]; fread(buffer, 最大バイト数を超えないデータ量 で,うまく読み込めず、 buffer = (char *)malloc(必要なだけの領域) fread(buffer, 最大バイト数を超えないデータ量 だとうまくいきます。 最大バイト数は27*181と小さく、またbufferをstaticにしても 関数の外部においてもバグります。 いったいなにがおかしいのか、こころあたりあるかた教えてください。 ちなみに、fread直後ですでに読み込みデータがおかしくなっています 読み込みデータはバイナリでfopen("filename","br");でよんでます

みんなの回答

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.6

>読み込んだファイルの内容がおかしくなっている状態です。 どのように? 「mallocだとうまくいく」というのはプログラムミスのせいだとしか 考えられません。因みに、以下のコードだとどうなりますか? static char area[27*181]; //大域変数として定義 char *buffer = area; fread(buffer,~

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.5

>char buffer[起こりうる最大バイト数]; >fread(buffer, 最大バイト数を超えないデータ量 >で,うまく読み込めず、 どううまく読み込めないのか、 それをどのように確認したのか、 どのような結果を期待しているのかが、 質問から読み取ることができませんでした。 また、 >buffer = (char *)malloc(必要なだけの領域) >fread(buffer, 最大バイト数を超えないデータ量 >だとうまくいきます。 とありますが、 動的メモリ確保でダメな理由はなんでしょうか? > fread直後ですでに読み込みデータがおかしくなっています これも最初と同じで、どのようにして読み込んで、 どのようにして確認したのかを提示していただけないでしょうか? あと、実際のコードを書かないのはなぜでしょう。。。? 小出しにするより、いま動かしているプログラムを 掲載したほうが早くかたが着くと思うのですが。。。

回答No.4

>読み込んだファイルの内容がおかしくなっている状態です。 オープンモードの「"br"」は不正な値なので、たぶん、デフォルトのオープンモードの「テキストモードで読み込み」でオープンされた筈(「"rb"」は許されるが「"br"」は許されない) なので、バイナリファイル中に「0x0D 0x0A」があると「0x0A」に変換され、以後のデータが1バイトづつズレる。 データが1バイトづつズレれば、当然「読み込んだファイルの内容がおかしくなって」いるように見える。 って事なのでは?

gogocafe
質問者

補足

記載ミスです。オープンモードはrbでした

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.3

>うまく読み込めず、 >バグります。 何がどう読み込めないのか、どういう現象を「バグる」と言って いるのか分かりません。 char buffer[100]; int sz = fread(buffer,1,100,fp); これで、失敗するんでしょうか? 100バイト以上あるファイルではszの値は100になっているはずです。 因みに、fread(buffer,100,1,fp) だと、1が返ります。 尚、プログラムの稼動環境はWindowsですか?

gogocafe
質問者

補足

読み込んだファイルの内容がおかしくなっている状態です。 環境はWindowsです

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

処理系が分からないので答えられません. ちなみに一般論ですが fopen のモードは r, w, a が最初に来るものしか動作は保証されない (つまり "br" ではなく "rb" でないとだめ) ことに注意. なお, heap ではなく (いわゆる) BSS ではないかと>#1.

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

暗黙のまま使えるheapが小さい実行モデルで実行ファイルを作ろうとしてるからじゃない?

関連するQ&A

専門家に質問してみよう