printf打印汉字变成?
时间: 2023-07-25 18:20:54 浏览: 49
如果在使用 printf 函数时打印汉字出现了问号,通常是因为字符集不匹配导致的。printf 函数默认使用 ASCII 字符集,而汉字通常使用的是 Unicode 字符集或者 GBK 字符集,因此需要在打印汉字时进行字符集转换。
以下是两种解决方法:
1. 使用 wprintf 函数进行宽字符输出。
```c++
#include <stdio.h>
#include <wchar.h>
int main()
{
wchar_t* str = L"你好,世界!";
wprintf(L"%s\n", str);
return 0;
}
```
在上述代码中,我们使用了 wchar_t 类型的字符串和 wprintf 函数进行宽字符输出。需要注意的是,在字符串前面加上 L 表示该字符串为宽字符,如果不加 L,则为普通字符。
2. 转换为多字节字符集后再使用 printf 函数输出。
```c++
#include <stdio.h>
#include <Windows.h>
int main()
{
wchar_t* wstr = L"你好,世界!";
int len = WideCharToMultiByte(CP_ACP, 0, wstr, -1, NULL, 0, NULL, NULL);
char* str = new char[len];
WideCharToMultiByte(CP_ACP, 0, wstr, -1, str, len, NULL, NULL);
printf("%s\n", str);
delete[] str;
return 0;
}
```
在上述代码中,我们将 wchar_t 类型的字符串转换为多字节字符集,然后使用 printf 函数输出。需要注意的是,WideCharToMultiByte 函数需要指定要使用的代码页,这里我们使用了系统默认的代码页 CP_ACP。同时,需要在转换完后手动释放内存。