- ベストアンサー
MFC/C++ sprintf の代わりに <<
- MFC/C++でファイル名を作成する方法についての質問です。
- sprintf() を使って作成していたファイル名をiostreamを使って作成する方法について教えてください。
- 変数xxxの定義方法が分からないので、教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
MFCならCString::Formatがあります。 これなら、sprintfとほぼ同等のことができます。 MFCではなくC++の標準ライブラリを使うのならsstreamがあります。 「C++編(標準ライブラリ) 第32章 文字列ストリーム」 http://www.geocities.jp/ky_webid/cpp/library/032.html
その他の回答 (4)
- zwi
- ベストアンサー率56% (730/1282)
WinRTはVisualStudio2012でしか開発できません。ついでにWindows8でしか開発・実行できません。まぁ、OSの機能が拡張されたので当然なのですが。 >Visual Studio 2010 で新規プロジェクトを作る場合、Visual C++ を選択すると、 >ATL, CLR, 全般, MFC, Win32 などが選択できるのですが、 >このうちどれが該当するのでしょうか。 >もしかすると、Visual C++ でさえないということでしょうか。 VisualStudio2012ではWindowsストアアプリと言う名称でしたね。 一応、C++からは利用できます。ただしC++/CXやらC++AMPやら色々登場して更にややこしい。ネイティブである必然(速度的問題)がないならC#をおすすめします。 http://www.atmarkit.co.jp/fdotnet/chushin/win8appdev_01/win8appdev_01_04.html
- zwi
- ベストアンサー率56% (730/1282)
資産・資源の有効活用と言う面から見るとマイクロソフトは短い期間で改変を繰り返すので信用できませんね。なのでC#やC++/CLIの言語自体は良いとしても.NETはどうなるか不安いっぱいです。 それとWindows8でWinRTと言うものを打ち出して来ていますので、これまた過去資産が活用できません。これはMFCは対応していないのでC++かVB/C#でWinRTで組むしか無いです。 Linux文化で生まれたGTK+やQt(キュート)などのウィジットツールもありますので将来的なことを考えて乗り換えも検討されたほうが良いと思います。ただし日本語資料は少ないんですけどMFCも滅びそうなので。 「Qt キュート」 http://www.sra.co.jp/qt/ LGPL版のサポート無しなら無料で、マルチプラットフォームなのでコンパイルするだけでWin/Linux/Macに対応可能です。
補足
ご教授ありがとうございます。 > GTK+やQt(キュート)などのウィジットツール いろいろあるのですね。 参考になります。 将来を見据えて、ちょっと検討してみます。 > これはMFCは対応していないのでC++かVB/C#でWinRTで組むしか無いです。 この場合の C++ とは、どういったものでしょう? Visual Studio 2010 で新規プロジェクトを作る場合、Visual C++ を選択すると、 ATL, CLR, 全般, MFC, Win32 などが選択できるのですが、 このうちどれが該当するのでしょうか。 もしかすると、Visual C++ でさえないということでしょうか。 度々恐れ入ります...
- zwi
- ベストアンサー率56% (730/1282)
将来的にMFCを止めるのならC++の標準ライブラリを使ったほうが良いと思います。 今後もMFCを使うならCStringで構わないと思います。CStringの方が便利なメソッドが多いですからね。 どちらにしてもC++やMFCをちゃんと勉強してもらわないと使えない代物ですので、今後のことを考えて決めて行くべき事です。こちらからはどうしたら良いとは何ともですね。 まぁ、CStringに似たクラスを自分で作れば何とでもなるのでCStringで良いんじゃないでしょうか。
補足
なるほど。参考になります。 久しぶりに C++ でプログラムを作ることになり、 経験のある MFC か、新たに CLI を勉強するか考えたんですが、 両者共 C++ と名乗っていても中身は随分違っていているようで、 CLI には頭の切り替えが追いつかずに結局 MFC にした次第です。 また、C++/CLI を勉強するなら C# の方がいいという話もありましたので。 (このあたりは、いろいろな考え方があると思いますが。) 仕方のないことでしょうが、開発言語もどんどん進化していき、 「これができる」と思っていたものが、次第に使えなくなっていきますね。
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
既に回答がありますが、C++ の標準ライブラリとしては、sstream があります。 #include <sstream> として、 std::sstream mystream; で、 mystream << (以下同様) です。 ただ、mystream は、std::sstream 型なので、char * とは互換性がありません。 mystream.str() で、std::string 型になり、 mystream.str().c_str() でchar* として参照できます。 (ただし、読むだけにした方が良いです)
お礼
参考になりました。 ありがとうございました。
補足
早速のご教授ありがとうございます。 No.1の方の補足にも書きましたように、 一つの処理についていろんなやりかたがあって難しいですね。 > mystream.str().c_str() でchar* として参照できます。 >(ただし、読むだけにした方が良いです) なるほど。ありがとうございます。 確か CString でも同様だったように記憶があります。
お礼
いろいろとご教授くださり、ありがとうございました。 大変参考になりました。 C#も勉強してみようと思います。 どうもありがとうございました。
補足
早速の回答をありがとうございます。 sstream は、勉強になりました。使えそうです。 実は CString::Format には馴染みがあって、これを使うのが楽です。 社内にはプログラミングができる人間がほとんどいないので、 今回のソースを社内で少しでも参考にしてもれるようにと考えていまして、 そこでよりC++な書き方をしようかと思っているのですが、 どうなんでしょう、素直に Format を使うべきなんでしょうか。 今回のこの iostream の件に限らず、ひとつの処理について、 ランタイムライブラリ, iostream, API 等いろんなアプローチがあるようで、 選択が難しいです。