2012-05-20 7 views
7

sé que con el especificador %s formato y std::string como esto conduce a un comportamiento indefinido:% s especificador de formato con el impulso :: formato y std :: string

std::string myString = "test"; 
printf("%s", myString); 

Pero, ¿es salvar a utilizar el mismo especificador y 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 especifica un (const) char*, pero proporcionan una std::string. ¿Podría esto conducir a UB también?

+0

me puede faltar el punto, pero ¿por qué no paso std :: string.c_str()? –

+1

Porque encontré muchas de esas llamadas en algún código heredado, y estoy tratando de decidir si necesito arreglarlo o no. También me gustaría saber cómo usar el especificador% s correctamente en el futuro. –

Respuesta

Cuestiones relacionadas