2011-11-23 37 views
1

我正在使用此代碼來格式化WideString,但沒有成功!它打印unexpecting結果:(如何正確使用sprintf或wprintf格式化WideString

這裏是我的代碼

當我使用 s.sprintf(L"%-11S","blablabla");它的工作原理
WideString s; 
dep=new TStringList(); 
while(!DM->tDepPln->Eof) 
    { 
    //where tDepPlnFltNo is mysql field type of WideString 
     s.sprintf(L"%-11S",DM->tDepPlnFltNo->AsWideString); 
     dep->Add(s); 
     DM->tDepPln->Next(); 
    } 

但是當我設置爲MySQL的字段類型WideString的它沒有!! 的,我認爲這個問題是轉換!

如何糾正???

回答

2

您的格式說明使用大寫S,它講述的...printf()函數的Unicode版本(例如內部使用的一個的WideString:::sprintf())期望char*而不是wchar_t*(並且Ansi味道...printf()的功能是期望wchar_t*而不是char*)。這就是爲什麼s.sprintf(L"%-11S","blablabla")的作品 - 你通過它char*

對於您正在嘗試什麼,你需要使用小寫s代替。你還需要使用WideString::c_bstr()方法傳遞一個WideString值到...printf()功能,例如當:

s.sprintf(L"%-11s", DM->tDepPlnFltNo->AsWideString.c_bstr()); 
+0

你是對雷米!我曾經使用小寫's',我經常在AnsiString中使用它。而且我知道我已經使用了上S,因爲我在下面的站點中看到了printf()func與上S的關係。 http://www.java2s.com/Tutorial/C/0300__Wide-Character-String/OutputwidecharacterstringwithSinprintf.htm思想WideString sprintf也使用這個,但不是。 –

+0

謝謝雷米的幫助!它工作'WideString(fieldAsWS).c_bstr();' –

相關問題