2011-04-14 67 views
5

當您使用TCHAR支持,在Windows上開發應用%s_tprintf()意味着char *字符串安思構建和wchar_t *爲Unicode版本,而%S意味着相反。是否有一個格式說明符總是意味着字符串與_tprintf?

但是否有任何格式說明符總是意味着char *串不管它是一個ANSI或Unicode建?因爲即使在Windows上,UTF-16並沒有真正用於文件或網絡,但無論您將應用編譯爲本機字符類型,您都希望處理基於字節的字符串。

回答

4

h改性劑的力和%s%Schar*,和l修改勢力既wchar_t*,即:%hs%hS%ls,並%lS

+0

這是具體到MSVC?我只注意到從GCC在Ubuntu 10這樣的警告:'警告:使用與「H」長度修改的「S」型character' – hippietrail 2011-04-28 02:43:16

+0

不,它不是具體到MSVC,一些其他的編譯器支持'h'和'l' 's'類型的修飾符也是如此。我猜gcc不是其中之一。 – 2011-04-28 09:26:48

+0

我剛剛嘗試過與gcc(Ubuntu/Linaro 4.5.2-8ubuntu4)4.5.2 - 它的工作,有點。 – 18446744073709551615 2012-04-12 07:38:48

0

你可以很容易地編寫這樣的事:

#ifdef _UNICODE 
#define PF_ASCIISTR "%S"L 
#define PF_UNICODESTR "%s"L 
#else 
#define PF_ASCIISTR "%s" 
#define PF_UNICODESTR "%S" 
#endif 

,然後使用PF_ASCIISTRPF_UNICODESTR宏在格式字符串,使用C自動字符串字面串聯:

_tprintf(_T("There are %d ") PF_ASCIISTR _T(" over the table"), 10, "pens"); 
1

這也可能會解決你的問題:

_TCHAR *message; 
_tprintf(_T("\n>>>>>> %d") TEXT(" message is:%s\n"),4,message); 
相關問題