Utilisation du spécificateur de format %s avec boost :: format et std :: string
-
12-12-2019 - |
Question
Je sais qu'en utilisant le %s
spécificateur de format et std::string
comme ceci conduit à un comportement indéfini :
std::string myString = "test";
printf("%s", myString);
Mais est-il rentable d'utiliser le même spécificateur et un std::string
avec 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
spécifie un (const) char*
, mais je fournis un std::string
.Cela pourrait-il également conduire à UB ?
La solution
Son utilisation est sûre %s
avec boost::format
et std::string
.Contrairement à printf
, le caractère de type dans la chaîne de format "n'impose pas que les arguments concernés appartiennent à un ensemble restreint de types, mais définit simplement les indicateurs associés à cette spécification de type".
http://www.boost.org/doc/libs/1_49_0/libs/format/doc/format.html#printf_directives
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow