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

StackOverflow https://stackoverflow.com//questions/10671996

  •  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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top