Pergunta

Eu sei que usando o %s especificador de formato e std::string como isso leva à indefinido comportamento:

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

Mas é guardar para usar o mesmo especificador e um std::string com 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 especifica um (const) char*, mas eu fornecer uma std::string.Isso poderia levar a UB também?

Foi útil?

Solução

É seguro usar %s com boost::format e std::string.Em contraste com printf, o tipo de caractere na cadeia de caracteres de formato "não impõe o interessado argumentos para ser, de um conjunto restrito de tipos, mas apenas define as bandeiras que estão associados a este tipo de especificação."

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top