7

我知道使用%s格式说明符,std::string这样会导致未定义的行为:

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

std::string但是使用相同的说明符和 a with是否可以节省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

%sboost::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 回答