Использование спецификатора формата %s с boost::format и std::string
-
12-12-2019 - |
Вопрос
Я знаю, что с помощью %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
указывает a (const) 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