将 %s 格式说明符与 boost::format 和 std::string 一起使用
-
12-12-2019 - |
题
我知道使用 %s
格式说明符和 std::string
这样会导致未定义的行为:
std::string myString = "test";
printf("%s", myString);
但是使用相同的说明符和 a 是否可以节省? 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
指定一个(常量) char*
, ,但我提供了一个 std::string
. 。这也能导致UB吗?
解决方案
使用安全 %s
和 boost::format
和 std::string
. 。相比之下 printf
, ,格式字符串中的类型字符“不会将相关参数强加为一组受限制的类型,而只是设置与此类型规范关联的标志。”
http://www.boost.org/doc/libs/1_49_0/libs/format/doc/format.html#printf_directives
不隶属于 StackOverflow