so che utilizzando l'identificatore di formato %s
e std::string
come questo porta ad un comportamento indefinito:Utilizzando% s identificatore di formato con boost :: formato e std :: string
std::string myString = "test";
printf("%s", myString);
Ma è salvare per utilizzare il stesso specificatore e 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 un (const) char*
, ma forniscono una std::string
. Questo potrebbe portare anche a UB?
I può essere manca il punto, ma perché non passare std :: string.c_str()? –
Perché ho trovato molte di quelle chiamate in un codice precedente e sto cercando di decidere se devo correggerlo o meno. Inoltre vorrei sapere come usare correttamente l'identificatore% s in futuro. –