2012-02-22 31 views
3

我試圖格式化使用升壓字符串:升壓::格式和wchar_t的

wchar_t *msg; 
// fill msg 
boost::format("Error: %s") % msg).str() 

我得到的MSG的內容,而不是,是十六進制味精的地址。

事情沒有成功,像這樣的:

boost::format("Error: %s") % new std::wstring(msg) 
boost::format("Error: %1%") % msg 

注意:雖然我認爲這是無關緊要的,但我填味精的方法是:

FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER | 40, NULL, GetLastError(), MAKELANGID(0, SUBLANG_ENGLISH_US), (LPTSTR) &msg, 512, NULL); 

和Visual Studio觀看顯示內容msg正確。

+0

爲什麼不解除消息? – Ylisar 2012-02-22 11:01:01

+2

你有沒有試過'「%ls」'?它用於寬字符的字符串。 – 2012-02-22 11:02:59

+0

@Ylisar用* msg解引用第一個字符的ASCII碼 – 2012-02-22 11:10:33

回答

8

嘗試使用boost::wformatwchar_t字符串一起使用。

0

您可以使用wilx建議的boost::wformat。或者您可以更改格式字符串以使用"%ls"(其中l是字母ell,小L.)這會修改"%s"以期望寬字符字符串。

+0

恐怕:%ls(用小L)打印地址。但這一個:boost :: wformat(L「錯誤:%1%」)%msg).str()打印內容 – 2012-02-22 11:30:13