解决C语言wprintf函数无法打印中文的问题

本文介绍了如何在VisualStudio中使用wchar_t数组存储UTF-16编码的字符串,由于C语言库函数wprintf无法打印中文,作者提供了一个自定义的my_wprintf函数,利用WriteConsoleW函数解决中文输出问题。
摘要由CSDN通过智能技术生成

在Visual Studio中,wchar_t[]字符数组用来存储UTF-16编码的字符串,但C语言库函数wprintf无法打印含有汉字的wchar_t字符串。
解决办法是用WriteConsoleW函数重新实现一个自己的my_wprintf函数。

#include <stdio.h>
#include <Windows.h>

// C语言自带的wprintf函数无法打印中文
// 所以这里重新实现一个能打印中文的my_wprintf函数
int my_wprintf(const wchar_t *format, ...)
{
	int n;
	va_list list;
	wchar_t str[1024];
	DWORD ret;
	HANDLE console;

	va_start(list, format);
	n = _vsnwprintf_s(str, _countof(str), _countof(str) - 1, format, list);
	va_end(list);

	console = GetStdHandle(STD_OUTPUT_HANDLE);
	WriteConsoleW(console, str, (DWORD)wcslen(str), &ret, NULL);
	return n;
}

void main()
{
	wchar_t wstr[] = L"abcd简体中文efgh";

	wprintf(L"wstr=%s, len=%d\n", wstr, (int)wcslen(wstr));
	my_wprintf(L"wstr=%s, len=%d\n", wstr, (int)wcslen(wstr));
}

程序运行结果:

  • 11
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巨大八爪鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值