2012-05-20 8 views
7

wiem, że przy użyciu specyfikatora formatu %s i std::string jak ten prowadzi do nieokreślonego zachowania:używania% s Format specifier z boost :: formatu i std :: string

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

Ale jest to zaoszczędzić używać ten sam specyfikator i std::string z 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 określa (const) char*, ale zapewniają std::string. Czy to też może prowadzić do UB?

+0

I może być brakuje punktu, ale dlaczego nie przekazać std :: string.c_str()? –

+1

Ponieważ znalazłem wiele z tych wywołań w starym kodzie i próbuję zdecydować, czy muszę to naprawić, czy nie. Również chciałbym wiedzieć, jak poprawnie używać specyfikatora% s w przyszłości. –

Odpowiedz