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

ChatGPT 3.5 国内中文镜像站免费使用啦

零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门


一.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 *”
*/

在 《 Unicode 和多字节区别 》 文章中有介绍 :Win32 API中大部分参数有字符串的函数都有两个版本,以 A 结尾,代表多字节版本,以 W 结尾,代表 Unicode 版本,两者互不兼容wprintf 函数声明如下:

int wprintf( const wchar_t *format, ... );

wprintf 使用方式和 printf 一样,如果输出多字节字符串 char ,使用 printf ;如果输出宽字节字符串 wchar_t,使用 wprintf ;


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

  • 输出多字节字符串 char ,使用 printf 函数 ;
  • 输出宽字节字符串 wchar_t,使用 wprintf 函数;
/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C/C++ printf / wprintf 函数使用
//@Time:2021/08/05 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

#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 字符串都能实现,那么在试一试中文看看是否正常?直接将上面的代码略作修改:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C/C++ printf / wprintf 函数使用
//@Time:2021/08/05 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

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 表示中文   方法二

完整代码如下:

/******************************************************************************************/
//@Author:猿说编程
//@Blog(个人博客地址): www.codersrc.com
//@File:C语言教程 - C/C++ printf / wprintf 函数使用
//@Time:2021/08/05 08:00
//@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
/******************************************************************************************/

#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. C语言 数组下标越界和内存溢出区别
  2. C语言 使用指针遍历数组
  3. C语言 指针和数组区别
  4. C语言 指针数组和数组指针区别
  5. C语言 野指针
  6. C语言 函数值传递和址传递
  7. C语言 函数不定长参数
  8. C语言 函数指针
  9. C语言 指针函数
  10. C语言 回调函数 callback
  11. C语言 #pragma once
  12. C语言 #include <> 与 #include “” 区别
  13. C语言 const 修饰函数参数
  14. C语言 const 和 define 区别
  15. C语言 #运算符
  16. C语言 ##运算符
  17. C语言 __VA_ARGS__
  18. C语言 ##__VA_ARGS__
  19. C语言 函数不定长参数 ##__VA_ARGS__经典案例
  20. C语言 va_start / va_end / va_arg 自定义 printf 函数
  21. C语言 main 函数
  22. C语言 main 函数参数 main(int argc, char *argv[])
  23. C语言 局部变量
  24. C语言 全局变量
  25. C语言 全局变量和局部变量区别
  26. C语言 static
  27. C语言 extern
  28. C/C++ Unicode 和多字节区别
  29. C/C++ wprintf 输出中文乱码
  30. C/C++ printf / wprintf 函数使用

ChatGPT 3.5 国内中文镜像站免费使用啦
© 版权声明
THE END
喜欢就支持一下吧
点赞1 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容