2012-05-20 50 views
7

我知道使用%s格式說明和std::string這樣會導致未定義的行爲:使用%s格式與升壓::格式的std :: string

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

但它是保存使用相同的說明符和std::stringboost::format

#include <boost/format.hpp> 

int main() 
{ 
    std::string myString = "test"; 

    boost::format fmt("%s"); 
    fmt % myString; 

    std::cout << fmt.str(); 

    return 0; 
} 

%s指定(常數)char*,但我提供std::string。這是否也會導致UB?

+0

我可能會錯過了點,但爲什麼不通過的std :: string.c_str()? –

+1

因爲我在一些遺留代碼中發現了很多這樣的調用,並且我試圖決定是否需要修復它。另外我想知道如何在將來正確使用%s說明符。 –

回答