7

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

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

std::stringしかし、同じ指定子とを使用することは節約できますboost::formatか?

#include <boost/format.hpp>

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

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

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

   return 0;
}

%s(const)char*を指定しますが、私はを提供しstd::stringます。これはUBにもつながる可能性がありますか?

4

1 に答える 1

9

%sと を併用しboost::formatても安全std::stringです。とは対照的にprintf、フォーマット文字列の型文字は、「関連する引数が制限された型のセットであることを強制するのではなく、単にこの型指定に関連付けられているフラグを設定するだけです。」

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

于 2012-05-20T08:48:36.580 に答える