Ich weiß, dass die %s
Formatbezeichner und std::string
wie dies mit zu undefiniertem Verhalten führt:Mit% s Formatspezifizierer mit boost :: Format und std :: string
std::string myString = "test";
printf("%s", myString);
Aber ist es speichert die verwenden gleicher Spezifikator und std::string
mit 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
legt ein (const) char*
, aber ich liefern eine std::string
. Könnte das auch zu UB führen?
Ich kann den Punkt fehlt, aber warum nicht std :: string.c_str() übergeben? –
Weil ich eine Menge dieser Anrufe in irgendeinem Legacy-Code gefunden habe, und ich versuche zu entscheiden, ob ich es beheben muss oder nicht. Außerdem würde ich gerne wissen, wie man den% s-Spezifizierer in Zukunft korrekt verwendet. –