我知道使用%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吗?
答案 0 :(得分:8)
将%s
与boost::format
和std::string
一起使用是安全的。与printf
相反,格式字符串中的类型字符“不会将相关参数强加为一组受限制的类型,而只是设置与此类型规范关联的标志。”
http://www.boost.org/doc/libs/1_49_0/libs/format/doc/format.html#printf_directives