C++クロスプラットフォーム(C99、C++ 0x independent)snprintf
で実装が可能かどうかと思いますか?そのようなブーストにはありますか? (私はsnprintf(4)
を交換するC++のイディオムであるものについて疑問に思う?)C++クロスプラットフォームsnprintfでの実装方法は?
答えて
std::ostringstream
がsnprintf
を使用するalterntive次のようになります。boost::lexical_castもあり
#include <sstream>
std::ostringstream s;
s << 4 << "hello";
// s.str().c_str(); // This returns `const char*` to constructed string.
:
char buf[1024];
snprintf(buf, 1024, "%d%s", 4, "hello");
は等価
std::string s = boost::lexical_cast<std::string>(4) +
boost::lexical_cast<std::string>("hello");
Y ouはQt QString classを見たいと思うかもしれません。これは、非常にOOのような方法であなたが望むことを行うフォーマット機能を提供します。あなたは確かにそこからコピーして学ぶことができます。
はい、タグ付きブーストであった質問でQtに言及するのはタブーになるかもしれませんが、その質問はそれよりも一般的なようでした。
はい、フォーマット文字列をサポートするBoost Formatライブラリがあります。
Boostが言及されて以来、Boost.Formatに問題はありますか?
Windows/Linux/HP-UXでsnprintf
が必要でした。私はsnprintf_safe
を定義し、Linux/HP-UXではsnprinf
を使用し、Windowsでは_snprintf
を使用しました。 _snprintf
には、データを格納するために必要なバイト数が最大許容サイズを超えている場合、 '\ 0'を書き込むアプローチが少し異なります。だからそれを処理する必要があった。代替として動作しますが、あなたは余分なコピーすることなく、より良いパフォーマンス・ソリューションを必要とするか、またはCがないC++あなたがかもしれないだけ持ってない場合
#ifdef #WIN32
int snprintf_safe()
{
// make use of _snprintf
}
#else
#define snprintf_safe snprintf
#endif
std::ostringstream
またはstd::to_string
(++ 11 C):とにかく、それはマクロのこのようなものでした
MSVCはC99をサポートしていないため、snprintf
機能は持っていませんが、セルフメイドのものは _snprintf
です。
戻り値:
- MSVC:-1を返します(ヌル終端を含まないすべてのものを書くことは、バッファサイズは十分ではない場合MSVCS
_snprintf
と公式C99(GCC、打ち鳴らす)snprintf
間違い!)
- GCC:
- MSVC::、できるだけ多くの書き込みがない場合は末尾にNULLを書いていないバッファが
興味深いスペースが
%n
を使用すると、MSVCはそれをユニット化したままにします!バッファサイズが小さいために解析が中断された場合、GCCはbufferが十分に大きい場合に書き込まれるバイト数を常に書き込みます。 だから私の提案は、同じ戻り値を与え、両方のプラットフォームで同じバイトを書き込みvsnprintf
/_vsnprintf
を使用して、独自のラッパー関数mysnprintf
を書くことになります(注意してください:%n
は修正するのがより困難です)。
- 1. LuaのクロスプラットフォームC#実装
- 2. インクリメンタルロードのクロスプラットフォーム実装
- 3. g ++でのsnprintf()の使用方法-std = C++ 11バージョン4.8.2
- 4. 汎用C#TypeConverterの実装方法は?
- 5. クロスプラットフォームの 'トースト'機能を実装する
- 6. C#でジェネリックメソッドを実装する方法
- 7. Cでビットセットを実装する方法
- 8. Cでクリップボードを実装する方法
- 9. C#でグラファーを実装する方法
- 10. クロスプラットフォームな方法は
- 11. ベストC++ムーブコンストラクタの実装方法
- 12. C#カスタムデータベースエンジン、SQLの実装方法
- 13. SQLデータエクスポートサービスの実装方法C#
- 14. C#Rhinoセキュリティの実装方法
- 15. C++ Builder XE - TFontプロパティの実装方法
- 16. Azure MobileAppControllerの実装方法C#
- 17. C++でのクロスプラットフォームOOP
- 18. バイナリデータ、クロスプラットフォーム(C/C++)から数値を読み取る方法は?
- 19. C++で関数のバイナリ検索を実装する方法は?
- 20. Cで単語のスペルチェックを実装する方法は?
- 21. C++でこのパターンを実装する方法は?
- 22. C++でテンプレートクラスの共分散を実装する方法は?
- 23. webserviceのC#で監査システムを実装する方法は?
- 24. C#:スマートキャッシュを実装する方法
- 25. c#ObservableCollection:CollectionChangedイベントを実装する方法
- 26. C#パンを実装する方法
- 27. オプションリストの実装方法は?
- 28. NetworkManagersの実装方法は?
- 29. ストラテジーデザインパターンの実装方法は?
- 30. SimpleMiddlewareの実装方法は?
C++イディオムは 'std :: stringstream'を使用しています。 –