C/C++ printf/wprintf函数使用

最后更新于:2020-06-06 09:36:49

一.printf/wprintf函数简介

C语言对于输出常规字符串到控制台,大家都知道可以通过printf函数,那么如果需要输出unicode字符串到控制台如何完成呢??

wchar_t* p = L"123456";
printf(L"unicode :%s \n", p);

编译器报错:

error C2664: “int printf(const char *,...)”: 无法将参数 1 从“const wchar_t [14]”转换为“const char *”

 

二.printf/wprintf函数输出字符串

unicode和多字节区别 文章中也有介绍 :Win32 API中大部分参数有字符串的函数都有两个版本,以A结尾/开头,代表多字节版本,以W结尾/开头,代表Unicode版本,两者互不兼容:

输出多字节字符串,使用printf函数 ;

输出宽字节字符串,使用wprintf 函数;

 

 

/************************************************************************/
/*@文件名      : printf/wprintf.cpp                                                       
/*@日  期      : 2020/5/29 19:37
/*@作  者      : 猿说编程 
/*@公众号      : 猿说编程
/*@博客        : www.shuopython.com
/*@描述        : printf/wprintf区别;wprintf输出Unicode字符串
/************************************************************************/
#include "stdafx.h"
#include <stdio.h>
#include "windows.h"


int main()
{
	char* p1 = "123456";		//普通字符串 - 多字节字符串
	wchar_t* p2 = L"123456";	//unicode字符串 - 字符串有修饰符 L
	printf("p1 :%s \n", p1);
	wprintf(L"p2 :%s \n", p2);

	system("pause");
	return 0;
}
输出:
p1 :123456
p2 :123456

请按任意键继续. . .

 

 

三.printf/wprintf函数输出中文乱码

到目前为止不管是输出多字节字符串还是unicode字符串都能实现,那么在试一试中文看看是否正常?直接将上面的代码略作修改:

char* p1 = "C/C++教程-猿说编程";		//普通字符串 - 多字节字符串
wchar_t* p2 = L"C/C++教程-猿说编程";	//unicode字符串 - 字符串有修饰符 L
printf("p1 :%s \n", p1);
wprintf(L"p2 :%s \n", p2);

输出:

p1 :C/C++教程-猿说编程
p2 :C/C++??-????
请按任意键继续. . .

 

解决wprintf输出中文乱码

如果unicode字符串中含有中文,使用wprintf函数输出前通常要通过setlocale函数设置输出文字的语言区域,例如:中文

#include <Locale.h> //需要包含头文件

_wsetlocale(LC_ALL, L"chs"); //chs 表示中文

setlocale(LC_ALL, "chs"); //chs 表示中文

 

完整代码如下:

/************************************************************************/
/*@文件名      : printf/wprintf.cpp                                                       
/*@日  期      : 2020/5/29 19:37
/*@作  者      : 猿说编程 
/*@公众号      : 猿说编程
/*@博客        : www.shuopython.com
/*@描述        : printf/wprintf区别;wprintf输出Unicode字符串
/************************************************************************/
#include "stdafx.h"
#include <stdio.h>
#include "windows.h"
#include <Locale.h>

int main()
{

	setlocale(LC_ALL, "chs");        // 本地化语言设置为中文,否则中文乱码

	char* p1 = "C/C++教程-猿说编程";		//普通字符串 - 多字节字符串
	wchar_t* p2 = L"C/C++教程-猿说编程";	//unicode字符串 - 字符串有修饰符 L
	printf("p1 :%s \n", p1);
	wprintf(L"p2 :%s \n", p2);


	system("pause");
	return 0;
}

输出:
p1 :C/C++教程-猿说编程
p2 :C/C++教程-猿说编程
请按任意键继续. . .

 

 

 

 

猜你喜欢:

1.三目运算符

2.逗号表达式

3.getchar函数

4.putchar函数

5.unicode和多字节区别

 

转载请注明猿说编程 » C/C++教程 » printf/wprintf函数使用



技术交流、商务合作请直接联系博主扫码或搜索:猿说编程

python/C++教程

猿说编程微信公众号 扫一扫关注