ページ 1 / 1
ファイルを読み込む時のアドレスの書き方2
Posted: 2011年10月12日(水) 17:39
by ほわいとふれあ
先程の「ファイルを読み込む時のアドレスの書き方」のトピックでファイル名の組み立て方は分かりましたが、現在のコードにどのようにそれを組み込んだらいいのか分からなくて困っております。
現在の"map1.dat"の所に先程組み立てた名前を入れるにはどのように記述したらいいのでしょうか。
現在のコードはこのような感じです。
コード:
map_data_t map_data;//マップデータを保存してある構造体
int main()
{
ostringstream sfilename;
int n = 99;
sfilename<< "map" << n << ".dat"; // ファイル名の組み立て。
cout << sfilename.str() << endl; // 結果
return 0;
}
int MapLoad(){
FILE *fp ;
if(fopen_s( &fp, "map1.dat" , "rb" ) != 0)return -1;//ここの"map1.dat"に組み立てた名前を入れたい
//ファイルからデータを読み込む
fread( &map_data, sizeof(map_data_t), 1, fp ) ;
fclose( fp );//解放
return 0;
}
Re: ファイルを読み込む時のアドレスの書き方2
Posted: 2011年10月12日(水) 17:49
by softya(ソフト屋)
えーと、まったくC++っぽくないMapLoad()なんですが本当にさっきのC++の文法で良かったのでしょうか?C言語の文法の範囲の書き方ってのも有るんですが。
[追記]ほわいとふれあ さんが理解している文法はC言語?それともC++のどちらでしょうか? それ次第で話が違います。
あとMapLoad()はファイル番号をどのように受け取るのでしょうか?
Re: ファイルを読み込む時のアドレスの書き方2
Posted: 2011年10月12日(水) 22:46
by ほわいとふれあ
C++ぽくないというと、どこかよろしくない点があるのでしょうか…
MapLoad()はこのサイトに載っていた構造体をファイルに入出力する例文を改変しただけですので正直どこが良くないかは自分ではわかりません。
私が理解している…というより書いているのはC++のつもりです。
書きかけのものを載せてしまったわけですが、マップの番号はグローバル変数なのでここには載っていないということでよろしいでしょうか…
Re: ファイルを読み込む時のアドレスの書き方2
Posted: 2011年10月12日(水) 23:13
by softya(ソフト屋)
ほわいとふれあ さんが書きました:C++ぽくないというと、どこかよろしくない点があるのでしょうか…
MapLoad()はこのサイトに載っていた構造体をファイルに入出力する例文を改変しただけですので正直どこが良くないかは自分ではわかりません。
私が理解している…というより書いているのはC++のつもりです。
いえ、C++の標準関数sstreamを使っただけですので難しいと思われたのならC言語の文法を勉強されていると思いました。
ぜひ、sstreamは勉強しておいて下さいね。
あとfopen系を使わずにfstreamを使う方法もあります。
「バイナリファイルの読み込みと書き込み - インコのC++プログラミング」
http://gurigumi.s349.xrea.com/programming/binary.html
ほわいとふれあ さんが書きました:
書きかけのものを載せてしまったわけですが、マップの番号はグローバル変数なのでここには載っていないということでよろしいでしょうか…
で、あれば"map1.dat"の代わりにsfilename.str()を使ってnの代わりにファイル番号のグローバル関数を使うだけですよ。
Re: ファイルを読み込む時のアドレスの書き方2
Posted: 2011年10月12日(水) 23:43
by ほわいとふれあ
コード:
ostringstream sfilename;
sfilename<< "map" << MapNumber << ".dat";
if(fopen_s( &fp, sfilename.str() , "rb" ) != 0)return -1;
その部分だけを書きなおすとこんな感じでしょうか。
これだと
エラー 11 error C2664: 'fopen_s' : 2 番目の引数を 'std::basic_string<_Elem,_Traits,_Ax>' から 'const char *' に変換できません。
12 IntelliSense: "std::basic_string<char, std::char_traits<char>, std::allocator<char>>" から "const char *" への適切な変換関数が存在しません
というエラーメッセージが出てコンパイルできないんですが、他の部分が間違っているということも考えられるでしょうか?
Re: ファイルを読み込む時のアドレスの書き方2
Posted: 2011年10月12日(水) 23:47
by softya(ソフト屋)
この場合は、 sfilename.c_str()ですね。失礼しました。
Re: ファイルを読み込む時のアドレスの書き方2
Posted: 2011年10月12日(水) 23:56
by ほわいとふれあ
sfilename.str()をsfilename.c_str()に書き換えた所
エラー 11 error C2039: 'c_str' : 'std::basic_ostringstream<_Elem,_Traits,_Alloc>' のメンバーではありません。
12 IntelliSense: class "std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char>>" にメンバー "c_str" がありません
という警告が現れました…。
Re: ファイルを読み込む時のアドレスの書き方2
Posted: 2011年10月13日(木) 00:12
by softya(ソフト屋)
またまた失礼しました。
sfilename.str()の戻り値はstringクラスのインスタンスですのでsfilename.str().c_str()が正解です。
今度は確認してるので大丈夫です。
Re: ファイルを読み込む時のアドレスの書き方2
Posted: 2011年10月13日(木) 00:16
by ほわいとふれあ
ありがとうございます。
コンパイルが通り、動作も確認できました。
長々と付き合ってくれてありがとうございました!