ファイル書き込み

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
pool

ファイル書き込み

#1

投稿記事 by pool » 15年前

課題1.
ファイルを読み込んで、幅、高さ、を構造体に格納せよ。
課題2.
ファイルを読み込んで、幅、高さ、を構造体に格納せよ。

よろしくお願いします。 画像

ookami

Re:pgmファイルの読み込み、別ファイルへの書き込み

#2

投稿記事 by ookami » 15年前

PGMファイルって初めて知りました。この掲示板を見ていると本当に勉強になります^^

以下のサイトが参考になるかもしれません。
http://www.mm2d.net/c/c-09.shtml

> /*ここからよくわかりません*/
> value.x=&data;
> *value.x=data;

ここで、確保していないメモリ領域に値を書き込んでしまっているようです。「2次元配列の確保の仕方は以下のような感じ」を応用して、1次元配列を確保してはいかがでしょう。


ookami

Re:pgmファイルの読み込み、別ファイルへの書き込み

#4

投稿記事 by ookami » 15年前

あら、てっきり「2次元配列の確保の仕方は以下のような感じ」はご自分で書いたものかと思っておりました。

PC上にメモリは膨大にありますが、プログラムはそのメモリのどこでも自由に使えるというわけではありません。処理系に「メモリをxxバイト確保せよ」と命令して、確保されたメモリだけを使えるのです。

http://www9.plala.or.jp/sgwr-t/lib/malloc.html
↑この辺が参考になるかと思います。

あと、
/*ここからよくわかりません*/
というのは、何かコンパイルエラーや実行時エラーがあったということでしょうか。あればそれも書き込んでもらえれば、回答が集まりやすいと思いますよ。

pool

無題

#5

投稿記事 by pool » 15年前

説明不足でした。すいません。これは出された問題をそのまま載せました。 画像

ookami

Re:pgmファイルの読み込み、別ファイルへの書き込み

#6

投稿記事 by ookami » 15年前

課題に書かれている
  gi->x=(float **)malloc(gi->height*sizeof(float *));
の部分を理解する必要がありますね。

例えば、
  float arr[128];
  :
  :
と、
  float *arr;
  arr=(float*)malloc(128*sizeof(float));
  :
  :
  free(arr);
は、ほぼ同じ意味になります。ここまではよろしいですか?これを踏まえ、


  /*ここからよくわかりません*/
  value.x=&data;
  *value.x=data;
  size=width*height;
  for(i=0;i<size;i++){
   fscanf(fp,"%f",&data);
   printf("*x : %f\n", *value.x);
  }

の部分を、

size=width*height;
value.x=(float*)malloc(size*sizeof(float));
for(i=0;i<size;i++){
fscanf(fp,"%f",&data);
value.x=data;
printf("*x : %f\n",value.x);
}
こんな感じ(未確認)にします。ここまではどうでしょう?
元のソースのどこが間違っているか、というのが何とも説明しづらいのですが..

pool

無題

#7

投稿記事 by pool » 15年前

>ookamiさん
丁寧に教えて頂きありがとうございました! 画像

閉鎖

“C言語何でも質問掲示板” へ戻る