2011-12-08 30 views
0

我有遺留的代碼,我正在增量移植到Visual C++中的Unicode字符(wchar_t)。我遇到的這段代碼,我想轉換:如何使用wchar_t字符串在VIsual C++中拋出異常?

char tmp[256]; 
sprintf(tmp, "stuff"); 
throw exception(tmp); 

我想將它更改爲這樣的事情(這使我對異常的編譯錯誤):

wchar_t tmp[256]; 
swprintf(tmp, "stuff"); 
throw exception(tmp); 

到目前爲止,我還沒有找到任何文件給我的拋出異常的Unicode等價物,任何人都可以幫助我?

當然,我可以將我的「tmp」轉換回char字符串,但這似乎很愚蠢,必須這樣做。

+0

這是標準C++庫的問題,它沒有接受wchar_t *的std :: exception構造函數。 Unicode在C++中受到冷遇。你將不得不做一些像轉換爲utf-8一樣的東西。 –

+0

我希望這不會是答案!儘管感謝您的幫助。 –

回答

1

std::exception不支持wchar_t字符串,所以你必須要麼轉換你wchar_t緩衝到一個單獨的char緩衝,或者不切換到wchar_t緩衝區開始爲sprintf()不支持通過其%S%ls格式化Unicode輸入格式化說明符,例如:

char tmp[256]; 
sprintf(tmp, "%ls", wchar_t data here); 
throw exception(tmp); 
+0

謝謝,這似乎是答案! –