读书笔记——Windows核心编程(2)比较字符串
1. CompareString
以符合用户语言习惯的方式,EX版本使用UNICODE
int CompareString(
__in LCID Locale,
__in DWORD dwCmpFlags,
__in LPCTSTR lpString1,
__in int cchCount1,
__in LPCTSTR lpString2,
__in int cchCount2
);
要注意的是,要获取字符串的长度时,如果使用_countof宏,则宏中参数必须为数组,使用指针则会发生如下错误
1>d:\wlscode\tempcode\tempcode\mainoftempcode.cpp(12): error C2784: “char (*__countof_helper(_CountofType (&)[_SizeOfArray]))[_SizeOfArray]”: 未能从“LPCTSTR”为“_CountofType (&)[_SizeOfArray]”推导 模板 参数
1> c:\program files\microsoft visual studio 10.0\vc\include\stdlib.h(343) : 参见“__countof_helper”的声明
一个简单的例子(仅涉及大小写和符号)
#include <Windows.h>
#include <stdio.h>
#include <conio.h> int main(int argc,char* argv[])
{
TCHAR str1[]=TEXT("aaabbbaabbaaaabbbb");//小写
int cchCount1=_countof(str1);
TCHAR str2[]=TEXT("AAABBBAABBAAAABBBB");//大写
int cchCount2=_countof(str2);
TCHAR str3[]=TEXT("AAA,BBB,AA,BB,AAAA,BBBB");//有符号
int cchCount3=_countof(str3);
TCHAR str4[]=TEXT("AAA,BBB.AA,BB,AAAA,BBBB");//有符号,有一个“,”变为“.”
int cchCount4=_countof(str3);
TCHAR str5[]=TEXT("AAA,BBB,,AA,BB,AAAA,BBBB");//有符号,将一个“,”写成“,,”
int cchCount5=_countof(str3); LCID Locale=GetThreadLocale(); //比较时忽略大小写
int nVal=CompareString(Locale,NORM_IGNORECASE,str1,cchCount1,str2,cchCount2)-2;//忽略大小写时,视为相等
printf_s("%d\n",nVal); //比较时忽略符号
nVal=CompareString(Locale,NORM_IGNORESYMBOLS,str2,cchCount2,str3,cchCount3)-2;//忽略符号时,视为相等
printf_s("%d\n",nVal); //比较时忽略符号
nVal=CompareString(Locale,NORM_IGNORESYMBOLS,str3,cchCount3,str4,cchCount4)-2;//忽略符号时,如果符号不相同,视为相等
printf_s("%d\n",nVal); //比较时忽略符号
nVal=CompareString(Locale,NORM_IGNORESYMBOLS,str3,cchCount3,str5,cchCount5)-2;//忽略符号时,并不忽略符号的数量
printf_s("%d\n",nVal); _getch(); return 0;
}
在这个例子中,忽略符号这个我做了多个比较。代码运行结果为四个0。
2. CompareStringOrdinal
比较程序内部使用的字符串(如路径名、注册表项/值、XML元素/属性等),是码位比较,不考虑区域设置,速度快。
只支持UNICODE。
int CompareStringOrdinal(
__in LPCWSTR lpString1,
__in int cchCount1,
__in LPCWSTR lpString2,
__in int cchCount2,
__in BOOL bIgnoreCase
);
这个不写例子了。
读书笔记——Windows核心编程(2)比较字符串的更多相关文章
- 读书笔记——Windows核心编程(8)Interlocked单向链式栈
SLists使用了无锁算法来保证原子同步,以提升系统性能,避免了诸如优先级挂和互锁的问题. 注意:所有的链表项必须对齐到MEMORY_ALLOCATION_ALIGNMENT.否则会出现奇葩的错误. ...
- 读书笔记——Windows核心编程(8)Interlocked系列函数
先让我们来复习下小学知识 A+B=C//式中A为被加数,B为加数. A-B=C//式中A为被减数,B为减数. 再让我们来明确一个知识点:返回值为void的Windows函数意味着一定会执行成功. -- ...
- 读书笔记——Windows核心编程(15)在应用程序中使用虚拟内存
微软的Windows提供了三种机制对内存进行操控 1 虚拟内存(最适合管理大型对象数组或大型结构数组) 2 内存映射文件(大型数据流/文件,共享数据) 3 堆(大量的小型对象) 预订地址空间区域Vi ...
- 读书笔记——Windows核心编程(13)Windows内存体系结构
对于32位进程(0x0000 0000~0xFFFF FFFF),有4GB的地址空间. 每个进程都有自己专有的地址空间,当进程的各个线程运行时,它们只能访问属于该进程的内存. 这4GB其实是虚拟地址空 ...
- 读书笔记——Windows核心编程(2)禁止C运行时触发的所有Debug Assertion Failed对话框
1 定义一个函数 void _invalid_parameter( const wchar_t * expression, const wchar_t * function, const wchar_ ...
- Windows核心编程第二章,字符串的表示以及宽窄字符的转换
目录 Windows核心编程,字符串的表示以及宽窄字符的转换 1.字符集 1.1.双字节字符集DBCS 1.2 Unicode字符集 1.3 UTF-8编码 1.4 UTF - 32编码. 1.5 U ...
- 《Windows核心编程》读书笔记 上
[C++]<Windows核心编程>读书笔记 这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对 ...
- C++Windows核心编程读书笔记
转自:http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E6%96%87/71405.shtml "C++Windows核心编程读书笔 ...
- 【转】《windows核心编程》读书笔记
这篇笔记是我在读<Windows核心编程>第5版时做的记录和总结(部分章节是第4版的书),没有摘抄原句,包含了很多我个人的思考和对实现的推断,因此不少条款和Windows实际机制可能有出入 ...
随机推荐
- 【第二课】深入理解Handler
简要讲解Handler是做什么的 我们知道,在Android中,app启动会启动一个进程一个线程——UI线程,UI线程是主线程,并且不允许这个线程阻塞超过5秒,一旦超过5秒就会ANR. 所以较为耗时的 ...
- Node.js下基于Express + Socket.io 搭建一个基本的在线聊天室
一.聊天室简单介绍 采用nodeJS设计,基于express框架,使用WebSocket编程之 socket.io机制.聊天室增加了 注册登录模块 ,并将用户个人信息和聊天记录存入数据库. 数据库采用 ...
- Razor视图引擎语法
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport&quo ...
- 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum
Sum Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=4704 Mean: 给定一个大整数N,求1到N中每个数的因式分解个数的 ...
- 【C#】线程协作式取消
Microsoft .Net Framework 提供了一个标准的取消操作的模式.这个模式是协作式的,意味着你想取消的操作必须显示地支持取消. CLR为我们提供了两个类: System.Threadi ...
- 轻松解决MYSQL数据库连接过多的错误
1.数据库系统允许的最大可连接数max_connections.这个参数是可以设置的.如果不设置,默认是100.最大是16384. 2.数据库当前的连接线程数threads_connected.这是动 ...
- WPF listbox UI虚拟化
ListBox 默认是UI虚拟化的. 1. 原生使用 <ListBox VirtualizingPanel.IsVirtualizing="True" Virtualiz ...
- windows远程控制
windows+r 输入 mstsc 打开远程控制 首先,确定目标机器支持远程控制 问题解决: Win7远程桌面提示您的凭据不工作: http://jingyan.baidu.com/article ...
- Tomcat服务器与MyEclipse绑定
myeclipse中eclipse添加了很多非常实用的插件,几乎包含了常用的所有应用服务器插件,其中自然包括支持各个版本的Tomcat插件. 先来看看Tomcat处理浏览器请求的过程图: 1.Tomc ...
- Android 手机卫士17--缓存清理
清理单个应用缓存 通过反射调用方法 需要权限:android.permission.DELETE_CACHE_FILES. 以上权限为系统权限,手机卫士应用为用户应用,不能拿到此权限 换思路: 调用系 ...