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 ?

Était-ce utile?

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
scroll top