Использование спецификатора формата%s с boost::format и std::string

Я знаю, что с помощью %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;
}

%s указывает (const) char*, но я предоставляю std::string, Может ли это привести к UB тоже?

1 ответ

Решение

Это безопасно использовать %s с boost::format а также std::string, В отличие от printfсимвол типа в строке формата "не навязывает соответствующие аргументы ограниченного набора типов, а просто устанавливает флаги, связанные с этой спецификацией типа".

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

Другие вопросы по тегам