首页 > 其他分享 >wchar_t类型理解

wchar_t类型理解

时间:2024-05-06 09:12:02浏览次数:40  
标签:字符 const cout 字符串 理解 wcout 类型 wchar

wchar_t(宽字符)类型

1、什么是wchar_t(宽字符)

char 类型通常只有 8 位,许多语言(如中文、日文、韩文等)的字符集包含的字符数目远超过 256 个,因此 char 类型无法直接表示这些字符。其大小通常为 16 位或 32 位(具体取决于编译器和平台),wchar_t 能够表示更多的字符。

2、赋值方法

前面多一个大写的L,说明是按照宽字符来存储(一个字符占两个字节)

#include<iostream>
using namespace std;
wchar_t ch = L'A';  // 声明一个宽字符变量并初始化为 'A'  
wchar_t str[] = L"Hello,World!";  // 声明一个宽字符数组并初始化为 "Hello, World!"

3、输出方法

使用wcout输出宽字符

wcout << ch << endl;
wcout << str << endl;

4、遇到问题wcout和cout不能同时显示

#include <iostream>
#include <string>
using namespace std;
int main()
{
    wchar_t ch = L'A';  
    wchar_t *str = L"Hello,World!"; 
    wcout << ch << endl;
    wcout << str << endl;

    cout << 2 << endl;
    cout << 1 << endl;
    return 0;
}

此处可以发现,wcout输出的显示了,cout输出的没有显示

问题出现在 wcout和cout 可能共享相同的底层缓冲区,而wcout的输出可能会改变该缓冲区的某些状态,这可能会影响到cout的输出。

解决方法:

1、避免混合使用wcout和cout。这不是一个必须遵循的规则,但在某些情况下,避免混合使用wcout和cout可能会减少潜在的问题。

2、使用std::cerr。尝试使用std::cerr而不是std::cout来输出调试信息。std::cerr通常不经过缓冲,因此可以立即看到输出。

4、求长度方法

使用wcslen()函数,在头文件< cwchar >中

#include <iostream> 
#include <cwchar>    //包含了wcslen函数
using namespace std;
int main()
{
    wchar_t str[] = L"Hello,World!"; 
    wcout << str << endl;

    size_t length = std::wcslen(str);   //std::wcslen 获取长度  
    wcout << sizeof(str) << endl;
    wcout << length << endl;
    return 0;
}

此处需要注意的是wcslen()返回值是size_t,而不是int。size_t的大小会根据平台和编译器而变化,以确保它能够存储任何对象的大小。

5、设置中文环境

需要引入头文件locale,使用setlocale(LC_ALL, "chs")设置为中文环境
使用wcout.clear()函数清除流错误,可以正常输出

6、常见宽字符处理函数

//1、求长度
wcslen(const wchar_t *ws);
//功能:返回字符串的长度(不包括终止符)
//返回值: size_t类型。

//2、复制字符串
wcscpy(wchar_t *dest, const wchar_t *src);
//功能:接受两个指向宽字符字符串的指针,并将 src 指向的字符串复制到 dest 指向的内存位置。
//返回值:返回 dest 的指针(wchar_t* 类型)。

//3、连接字符串
wcscat(wchar_t *dest, const wchar_t *src);
//功能:接受两个指向宽字符字符串的指针,并将 src 指向的字符串追加到 dest 指向的字符串的末尾。
//返回值:返回dest 的指针(wchar_t* 类型)。

//4、判断相等
wcscmp(const wchar_t *ws1, const wchar_t *ws2);
//功能:接受两个指向宽字符字符串的指针,并比较这两个字符串。如果相等则返回0,否则返回非0值。
//返回值:返回类型为 int。

//5、找子串
wcsstr(const wchar_t *ws1, const wchar_t *ws2);
//接受两个指向宽字符字符串的指针,并在 ws1 中查找 ws2 第一次出现的位置。如果找到则返回指向该位置的指针,否则返回 NULL(const wchar_t* 类型)。

标签:字符,const,cout,字符串,理解,wcout,类型,wchar
From: https://www.cnblogs.com/baobaobashi/p/18171926

相关文章

  • 深入学习和理解Django模板层:构建动态页面
    title:深入学习和理解Django模板层:构建动态页面date:2024/5/520:53:51updated:2024/5/520:53:51categories:后端开发tags:Django模板表单处理静态文件国际化性能优化安全防护部署实践第一章:模板语法基础Django模板语法介绍Django模板语法是一种简洁而......
  • 数据类型之字符串
    1、字符串的定义单引号,双引号引起来的2、字符串的索引和切片和转义2.1索引:1.索引值从0开始索引超长会报错IndexError:stringindexoutofrange2.写法:str[0]2.2切片:1.[起始下标:终止下标:步长]:起始下标默认为0,步长默认为12.取头不取尾,左开右闭3.步长为正数,正......
  • 深入学习和理解Django视图层:处理请求与响应
    title:深入学习和理解Django视图层:处理请求与响应date:2024/5/417:47:55updated:2024/5/417:47:55categories:后端开发tags:Django请求处理响应生成模板渲染表单处理中间件异常处理第一章:Django框架概述1.1什么是Django?Django是一个高级的PythonWeb......
  • 值类型和引用类型的区别
    值类型---简单类型基本类型 比如数字,字符串布尔等 引用类型 -复杂类型对象类型比如对象函数委托等 区别:1.内存层面:值类型内存的分配和释放有编辑器管理,引用类型内存的分配和释放由垃圾回收期(GC)管理2.存储位层面:存储位置:值类型存储栈内存,只有数据;引......
  • 如何快速提取出一个文件里面全部指定类型的文件的全部路径
    首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z打开工具,切换到第五个模块,文件批量复制模块(快捷键:Ctrl+5)点击右边的“搜索添加”按钮,我这里就从我的PS文件夹里面找出全部的jpg图片叭,勾选两项,搜文件,并且搜全部子文件,然后点开始搜索按钮搜索完之后关闭窗口,就......
  • 程序中,对锁的理解
    在并发编程中,加锁是为了保证数据的完整性和一致性,在程序中,特别是并发编程的上下文中,**锁**(Lock)是一种同步机制,用于控制多个线程或进程对共享资源的访问,以防止数据竞争(DataRace)和保持数据一致性。当多个执行单元(如线程)试图同时访问或修改同一份共享资源时,如果没有适当的同步措......
  • python教程3.1:数据类型:字符串+列表list
    一、字符串字符串是⼀个有序的字符的集合,⽤于在计算机⾥存储和表示⽂本信息 常用操作二、列表list[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表⼀个元素特征 1、增加操作   追加,数据会追加到尾部 2、删除操作3、修改操作 4、查找操作 如果......
  • Python深入理解*和**含义和应用
    本文源代码:https://gitee.com/obullxl/PythonCS/tree/master/CS-CY2405Python中*和**很常见禅师在阅读Python代码过程中,经常看到一个函数或方法的入参是*args和**kwargs(如:deffunc(*args,**kwargs)等)形式,或者在调用函数或方法时,在入参的元组和列表前面增加1个*号(如:func(*(1,2,......
  • python教程2:变量+数据类型+运算符
    一、变量程序是从上到下依次逐⾏执⾏的,所以变量必须先定义,后调⽤,否则会报错变量定义规范 二、数据类型1、数字类型可⽤type()⽅法来查看数据类型 2、字符串多引号多引号什么作⽤呢?作⽤就是多⾏字符串必须⽤多引号字符串拼接3、布尔类型布尔类型很简单,就两个......
  • 我对操作系统的理解
    当我们谈论操作系统时,我们可以将其视为计算机的“大管家”或“资源调配师”。它管理着计算机的硬件和软件资源,确保它们得到合理的分配和使用。具体来说,操作系统具有以下几个核心功能:进程管理:操作系统负责协调和控制计算机上运行的程序。它确保每个进程都能得到适当的CPU时间,从而实......