Использование спецификатора формата%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