質問

私はそれを使用することを知っています %s フォーマット指定子と std::string このように未定義の動作が発生します。

std::string myString = "test";
printf("%s", myString);

しかし、同じ指定子と std::stringboost::format?

#include <boost/format.hpp>

int main() 
{
   std::string myString = "test";

   boost::format fmt("%s");
   fmt % myString;

   std::cout << fmt.str();

   return 0;
}

%s (定数) を指定します char*, 、しかし私は、 std::string. 。これもUBにつながるのでしょうか?

役に立ちましたか?

解決

安全に使用できます %sboost::format そして std::string. 。対照的に、 printf, 、書式文字列内の型文字は、「関連する引数が制限された型セットであることを強制するのではなく、単にこの型仕様に関連付けられたフラグを設定するだけです。」

http://www.boost.org/doc/libs/1_49_0/libs/format/doc/format.html#printf_directives

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top