考虑以下示例程序:
#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
我很好奇:
最佳答案
您需要做:
wprintf(L"3 %hs \n", narrowstr.c_str());
wprintf(L"4 %s \n", widestr.c_str());
为什么?因为对于
printf
,%s 说的是窄字符字符串。对于wprintf
,%ls 说宽。但是,对于
wprintf
,%s 表示宽,%ls 表示宽。 %hs 表示较窄(两者均适用)。对于printf
,%s ,以这种方式仅表示%hs 在VC++/Windows上,
%S
(大写S)将反转效果。因此,printf("%S")
的意思是宽,而wprintf("%S")
的意思是窄。这对于_tprintf
很有用。