Utilizzo di %s identificatore di formato con boost::format e std::string
-
12-12-2019 - |
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?
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