2012-05-20 12 views
7

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?

+0

I può essere manca il punto, ma perché non passare std :: string.c_str()? –

+1

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

risposta

Problemi correlati