零基础 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++教程-猿说编程
请按任意键继续. . .
*/
四.猜你喜欢
- C语言 数组下标越界和内存溢出区别
- C语言 使用指针遍历数组
- C语言 指针和数组区别
- C语言 指针数组和数组指针区别
- C语言 野指针
- C语言 函数值传递和址传递
- C语言 函数不定长参数
- C语言 函数指针
- C语言 指针函数
- C语言 回调函数 callback
- C语言 #pragma once
- C语言 #include <> 与 #include “” 区别
- C语言 const 修饰函数参数
- C语言 const 和 define 区别
- C语言 #运算符
- C语言 ##运算符
- C语言 __VA_ARGS__
- C语言 ##__VA_ARGS__
- C语言 函数不定长参数 ##__VA_ARGS__经典案例
- C语言 va_start / va_end / va_arg 自定义 printf 函数
- C语言 main 函数
- C语言 main 函数参数 main(int argc, char *argv[])
- C语言 局部变量
- C语言 全局变量
- C语言 全局变量和局部变量区别
- C语言 static
- C语言 extern
- C/C++ Unicode 和多字节区别
- C/C++ wprintf 输出中文乱码
- C/C++ printf / wprintf 函数使用
ChatGPT 3.5 国内中文镜像站免费使用啦
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容