當您使用TCHAR
支持,在Windows上開發應用%s
在_tprintf()
意味着char *
字符串安思構建和wchar_t *
爲Unicode版本,而%S
意味着相反。是否有一個格式說明符總是意味着字符串與_tprintf?
但是否有任何格式說明符總是意味着char *
串不管它是一個ANSI或Unicode建?因爲即使在Windows上,UTF-16並沒有真正用於文件或網絡,但無論您將應用編譯爲本機字符類型,您都希望處理基於字節的字符串。
當您使用TCHAR
支持,在Windows上開發應用%s
在_tprintf()
意味着char *
字符串安思構建和wchar_t *
爲Unicode版本,而%S
意味着相反。是否有一個格式說明符總是意味着字符串與_tprintf?
但是否有任何格式說明符總是意味着char *
串不管它是一個ANSI或Unicode建?因爲即使在Windows上,UTF-16並沒有真正用於文件或網絡,但無論您將應用編譯爲本機字符類型,您都希望處理基於字節的字符串。
的h
改性劑的力和%s
和%S
到char*
,和l
修改勢力既wchar_t*
,即:%hs
,%hS
,%ls
,並%lS
。
你可以很容易地編寫這樣的事:
#ifdef _UNICODE
#define PF_ASCIISTR "%S"L
#define PF_UNICODESTR "%s"L
#else
#define PF_ASCIISTR "%s"
#define PF_UNICODESTR "%S"
#endif
,然後使用PF_ASCIISTR
或PF_UNICODESTR
宏在格式字符串,使用C自動字符串字面串聯:
_tprintf(_T("There are %d ") PF_ASCIISTR _T(" over the table"), 10, "pens");
這也可能會解決你的問題:
_TCHAR *message;
_tprintf(_T("\n>>>>>> %d") TEXT(" message is:%s\n"),4,message);
這是具體到MSVC?我只注意到從GCC在Ubuntu 10這樣的警告:'警告:使用與「H」長度修改的「S」型character' – hippietrail 2011-04-28 02:43:16
不,它不是具體到MSVC,一些其他的編譯器支持'h'和'l' 's'類型的修飾符也是如此。我猜gcc不是其中之一。 – 2011-04-28 09:26:48
我剛剛嘗試過與gcc(Ubuntu/Linaro 4.5.2-8ubuntu4)4.5.2 - 它的工作,有點。 – 18446744073709551615 2012-04-12 07:38:48