Domanda

So che usando il %s l'identificatore di formato e std::string come questo porta a comportamenti indefiniti:

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

Ma è salva per utilizzare lo stesso identificatore di un std::string con 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 specifica (const) char*, ma ho un std::string.Questo potrebbe portare a UB troppo?

È stato utile?

Soluzione

È sicuro da usare %s con boost::format e std::string.In contrasto printf, il tipo di carattere nella stringa di formato "non impone l'interessato, di argomenti di un insieme limitato di tipi, ma si limita a fissare le bandiere che sono associati con questo tipo di specifica."

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top