2012-05-20 12 views
7

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?

+0

Ich kann den Punkt fehlt, aber warum nicht std :: string.c_str() übergeben? –

+1

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. –

Antwort

Verwandte Themen