考慮這個示例程序:printf(「%s」),printf(「%ls」),wprintf(「%s」)和wprintf(「%ls」)有什麼區別?
#include <cstdio>
#include <cwchar>
#include <string>
int main()
{
std::string narrowstr = "narrow";
std::wstring widestr = L"wide";
printf("1 %s \n", narrowstr.c_str());
printf("2 %ls \n", widestr.c_str());
wprintf(L"3 %s \n", narrowstr.c_str());
wprintf(L"4 %ls \n", widestr.c_str());
return 0;
}
的這個輸出是:
1 narrow
2 wide
我想知道:
- 爲什麼3 & 4沒有打印
- 什麼差異在1 & 3和2 & 4.
- 它是否有任何區別,如果narrowstr在utf8中而且vasttr在utf16中?
你看了文檔?值得注意的是[cstdio](http://www.cplusplus.com/reference/cstdio/)? – 2014-11-08 11:24:57
「vasttr is in utf16」意味着您使用的是Windows(更適合Unicode的系統使用UTF-32作爲寬字符串的默認值)。如果你想在WIndows系統上使用標準的C++或C來完成除ASCII以外的任何事情,那麼有很多神祕的箍環可以跳轉。你也可以投入並使用WinAPI。 – Cubbi 2014-11-13 02:59:23
不要投放到MICROSOFT STUPIDITY。節省自己的痛苦並編寫自己的字符串庫。對於上帝的愛不要使用Windows宏觀轉換和其他瘋狂,相信我,這是可怕的,並在混亂中各種錯誤蔓延。 – Owl 2017-05-12 14:38:00