windows核心编程心解--字符和字符串处理
来源:互联网 发布:女性必知的妇科小知识 编辑:程序博客网 时间:2024/05/17 20:01
程序一贯使用Unicode字符串有很多好处。
处理字符串需要注意的重要问题是安全问题,就是处理字符串时发生缓冲区溢出的问题,要引起关注。也就是使用处理字符串的函数尽量使用可以检测缓冲区溢出的函数。
一直以来,本地化的核心问题就是处理不同字符集的问题。
用于表示字符的几个UTF标准:
UTF-8、UTF-16、UTF-32(对于三者之间的区别和联系有待于以后补充)
关于字符串:
c语言中使用char类型来表示一个8位的ANSI字符。
c++编译器中提供了一个内建数据类型wchar_t,来表示一个UTF-16字符,声明并给这类型字符串或字符赋值时要前面加上L“”;
Windows定义了自己的数据类型,包含在头文件WinNT.h中。
CHAR;
和WCHAR
关于程序中使用数据类型的统一:
最好使用windows数据类型,这些数据类型和MSDN相符合,增强了文件的可读性。
使用WinNT.h文件中定义的数据类型和宏,可以做到在asci和unicode下都可以编译通过。
——————————————————————————————————————————————
windows中的大部分函数都有两个版本:
例如函数CreateWindowsEx().其实他是有两个版本CreateWindowsExW()和CreateWindowsExA().平时使用时,这个函数在WinUser.h头文件中定义了一个宏。
就是说程序会自动匹配,调用哪个。
——————————————————————————————————————————————
Microsoft将COM(有待于研究什么意思)从16位windows移植到32位时,决定:所有需要字符串作为参数的COM接口方法都只接受Unicode字符串。
16位的只接受ansi字符串,比如有些函数就是为了兼容16位,(WinExec和OpenFile)遇到这些函数时尽量使用(CreateProcess和CreateFile)来替换。
——————————————————————————————————————————————
c语言中,针对不属于c++部分的标识符,c运行库始终会为他们附加下划线前缀,比如c中本身属于String.h中的strlen和wcslen以及strcpy和wcscpy,应该尽量使用取代函数在TChar.h中定义了宏_tcslen(),这样无论ansi和unicode都可以编译通过。和windows中的wcscat函数。获取字节数使用sizeof函数。
新的安全字符串处理函数:
包含在头文件StrSafe.h中,函数名称都在后面添加了一个_s做为标识。或者c运行库中还增加了一些函数,以StringCch或StringCb为前缀的函数,用于在执行字符串是可以获的更多的控制,比如截断字符串和填充符等。程序总应该尽量使用这些函数。
——————————————————————————————————————————————
与字符串有关的计算:
内存是以字节来分配。可以通过定义宏来避免错误,
包含在头文件stdlib.h中,_countof可以计算出缓存区的大小的字符数。malloc来计算字节数。(有待测试)
编译器执行运行时检查,自动检查缓存区是否溢出。(有待进一步理解)
——————————————————————————————————————————————
windows字符串处理函数:
比较字符串进行相等性测试或者进行排序,使用函数CompareString(EX)和CompareStringOrdinal。
得到主调线程的区域设置ID(LCID),使用函数GetThreadLocale。
比较程序内部所用的字符串(如路径名、注册表值、xml值等),使用函数ComparestringOrdinal。
———————————————————————————————————————————————
关于Unicode和ansi字符串转换:
参考本博客空间中的文章《关于字符串的相互转换问题(全)》
———————————————————————————————————————————————
判断文本文件编码格式:
第一种方法,可以使用StdioFileEx.cpp文件(有待研究内部机制)
第二种方法,使用函数IsTextUnicode。
- windows核心编程心解--字符和字符串处理
- 【Windows 核心编程】Windows 核心编程 -- 字符和字符串处理
- Windows核心编程:字符和字符串处理
- 字符和字符串处理 《Windows核心编程》
- Windows核心编程:字符和字符串处理
- Windows核心编程 字符和字符串处理
- Windows核心编程(二)字符和字符串处理
- 《Windows核心编程5》第二章-字符和字符串处理
- Windows核心编程笔记——字符和字符串处理
- windows核心编程学习日记-字符和字符串处理 上篇
- Windows核心编程002-字符和字符串处理
- windows核心编程 第2章 字符和字符串处理
- 《Windows核心编程》读书笔记二 字符和字符串处理
- Windows核心编程--错误处理/字符/字符串
- 《Windows核心编程》——二字符与字符串处理
- 《Windows核心编程》读书心得——字符和字符串处理(1)
- windows核心编程系列学习记录2——字符和字符串处理
- 《解读window核心编程》 之 字符和字符串处理方式
- asp.net中Cache类的用法。
- getRequestDispatcher()与sendRedirect()的区别
- Debug Build: dex conversion fails with IllegalArgumentException “already added”
- VisualGC/jvmstat监控jvm的heap消耗
- char、signed char、unsigned char的区别
- windows核心编程心解--字符和字符串处理
- 提取汉字首字母的工具类
- ecshop常用修改
- 黑马程序员_反射机制
- ffmpeg转换参数和对几种视频格式的转换分析
- C++中const使用详解
- 记录Extjs中各种小例子
- 采用jasperreports用HTML方式打印报表,图片展示不出来,求救!!!
- Eclipse 各版本的源代码(在线版)