C++ 将%s格式说明符与boost::format和std::string一起使用

C++ 将%s格式说明符与boost::format和std::string一起使用,c++,boost,boost-format,C++,Boost,Boost Format,我知道这样使用%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"

我知道这样使用
%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;
}
#包括
int main()
{
std::string myString=“test”;
boost::格式化fmt(“%s”);
fmt%myString;

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


我可能没有抓住要点,但为什么不传递std::string.c_str()?因为我在一些旧代码中发现了很多这样的调用,我正在尝试决定是否需要修复它。我还想知道将来如何正确使用%s说明符。