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

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

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

有帮助吗?

解决方案

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top