Usando o especificador de formato %s com o boost::formato e std::string
-
12-12-2019 - |
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?
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