我有一个简单的代码,argv[1]
是"Привет"
。
#include <stdio.h>
#include <tchar.h>
#include <Windows.h>
#include <locale.h>
int _tmain(int argc, TCHAR* argv[])
{
TCHAR buf[100];
_fgetts(buf, 100, stdin);
_tprintf(TEXT("\nargv[1] %s\n"), argv[1]);
_tprintf(TEXT("%s\n"), buf);
}
在控制台中,我写"Мир"
并得到以下结果:
如果我使用setlocale(LC_ALL, "")
,我会得到以下结果:
在这两种情况下,我该怎么做才能获得正确的字符串?
答案 0 :(得分:2)
显然你的程序有效,除了它无法在控制台窗口上正确打印。这是因为Windows控制台与Unicode不完全兼容。对Visual Studio使用_setmode
。这适用于俄语,但某些亚洲语言可能存在其他问题。将WriteConsole
用于其他编译器。
Visual Studio示例:
#include <stdio.h>
#include <io.h> //for _setmode
#include <fcntl.h> //for _O_U16TEXT
int wmain(int argc, wchar_t* argv[])
{
_setmode(_fileno(stdout), _O_U16TEXT);
wprintf(L"%s", L"Привет\n");
return 0;
}