使用带有boost :: format和std :: string的%s格式说明符

时间:2012-05-20 08:37:42

标签: c++ boost boost-format

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

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

但使用相同的说明符和使用std::string的{​​{1}}是否可以保存?

boost::format

#include <boost/format.hpp> int main() { std::string myString = "test"; boost::format fmt("%s"); fmt % myString; std::cout << fmt.str(); return 0; } 指定(const)%s,但我提供char*。这会导致UB吗?

1 个答案:

答案 0 :(得分:8)

%sboost::formatstd::string一起使用是安全的。与printf相反,格式字符串中的类型字符“不会将相关参数强加为一组受限制的类型,而只是设置与此类型规范关联的标志。”

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