推荐的字符和字符串处理方法

最好将应用程序转换为支持Unicode的形式。 遵循的基本准则如下:

1.开始将文本字符串想象为字符的数组,而不是char或字节的数组

2.用通用数据类型(如TCHAR/PTSTR)来表示文本字符和字符串

3.用明确的数据类型(如BYTE和PBYTE)来表示字节,字节指针和数据缓冲区

4.用TEXT或_T宏来表示字面量字符和字符串,但为了保持一致性和更好的可读性,请避免两者混用

5.执行全局替换(例如,用PTSTR替换PSTR)

6.修改于字符串有关的计算。例如,函数经常希望我们传给它缓冲区大小的字符数,而不是字节数,这意味着我们应该传入_countof(szBuffer),而不是sizeof(szBuffer)。而且,如果需要为一个字符串分配一个内存,而且知道字符串中字符数,那么要记住内存是以字节来分配的。这意味着我们必须调用malloc(nCharacters*sizeof(TCHAR)),而不是调用malloc(nCharacgers)。在前面列出的所有基本准则中,这是最难记住的一条,最好定义一个宏来避免犯错:

  1. #define chmalloc(nCharacters) (TCHAR*)malloc(nCharacters*sizeof(TCHAR))

7.避免使用printf系列函数尤其是不要用%s和%S字段类型来进行ANSI于Unicode字符串之间的相互转换。正确的做法是使用MultiByteToWideChar和WideCharToMultiByte函数

8.UNICODE和_UNICODE符合要么同时指定,要么都不指定

对于字符串处理函数,应遵循以下基本准则。

1.始终使用安全的字符串处理函数,比如后缀为_s的函数,或者前缀为StringCch的函数,后者主要在我们明确控制截断的时候使用;如果不想明确控制截断,则首选前者。

2.不要使用不安全的C运行库字符串函数。

3.利用/GS和/RTCs编译器标志来自动检测缓冲区溢出。

4.不要用kernel32方法来进行字符串处理,比如lstrcat 和 lstrcpy。

5.比较两种字符串,应使用CompareStringOrdinal来进行比较,因为他非常快,不会考虑用户的区域设置。

时间: 2024-08-01 22:46:32

推荐的字符和字符串处理方法的相关文章

《解读window核心编程》 之 字符和字符串处理方式

推荐的字符和字符串处理方式 開始将文本字符串想象为字符的数组,而不是 char 或字节的数组. 用通用数据类型(如 TCHAR/PTSTR )来表示文本字符和字符串. 用明白的数据类型(如 BYTE 和 PBYTE )来表示字节,字节指针和数据缓冲区. 用 TEXT 或 _T 宏来表示字面量字符和字符串.但为了保持一致性和更好的可读性,请避免两者混用: 运行全局替换(比如用 PTSTR 替换 PSTR ) ; 改动与字符串有关的计算.比如,函数常常希望我们传给它缓冲区打小的字符数.而不是字节数.

字符和字符串处理-ANSI字符和Unicode字符

我们知道,C语言用char数据类型表示一个8位的ANSI字符,默认在代码中声明一个字符串时,C编译器会把字符串中的字符转换成由8位char数据类型构成的一个数组: // An 8-bit character char c = 'A'; // An array of 99 8-bit character and 8-bit terminating zero char szBuffer[100] = "A String"; Microsoft的C/C++编译器定义了一个内建的数据类型wch

编程题:字符串与字符数组的输入方法。

#include<stdio.h> void main() {char str1[6],str2[10]; int i; for(i=0;i<5;i++) scanf("%c",&str1[i]); str1[5]='\0'; scanf("%s",str2); printf("%s\n%s\n",str1,str2); } 编程题:字符串与字符数组的输入方法.,布布扣,bubuko.com

js使用split函数按照多个字符对字符串进行分割的方法

这篇文章主要介绍了js使用split函数按照多个字符对字符串进行分割的方法,实例分析了split函数的使用技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了js使用split函数按照多个字符对字符串进行分割的方法.分享给大家供大家参考.具体分析如下: js中的split()函数可以对字符串按照指定的符号进行分割,但是如果字符串中存在多个分割符号,js的split()函数是否还可以胜任呢,答案是肯定的,js的split()函数可以通过正则表达式实现多分隔符的字符串分割,调用也很简单,下面

C Language Study - 字符数组及字符串定义方法

定义一个字符数组: char cArray[] = {'I','a','m','a','m','a','n','\0'}; 用'\0'表示字符数组结束标志.它不占字符长度大小,但是占内存大小. Result : sizeof(cArray) = 8 ; strlen(cArray) = 7 . 字符串定义方法: (1) char cString[] = "I am a Man !"; 定义了一个字符串数组,与定义一个字符数组实质一样. (2) char *pString = "

c# 第14节 字符方法、转义字符、字符串的方法

本节内容: 1:字符的定义 2:字符的方法 3: 转义字符 4:字符串简介 5:字符串方法 1:字符的定义 char与Unicode一一对应,一个char 2个字节. 2:字符的使用方法: 实例: static void Main() { char a = 'a'; char b = '0'; char c = 'A'; if (char.IsLetter(a)){ //判断小写 Console.WriteLine("a是{0}小写,转大写是{1}", a, char.ToUpper(

拼凑字符串时,去除末尾多余字符的几个方法

title: 拼凑字符串时,去除末尾多余字符的几个方法 date: 2018-08-17 22:12:58 tags: [Java,方法] --- 在拼接字符串的时候,经常会发现多了,不想要的字符,让人很是烦恼,这下面总结三个可以去掉烦恼的方法. //循环生成json格式数据 public static String CreateJson() { String json="{\"content\":["; for(int i=0;i<5;i++) { json

【转载】Python使用中文正则表达式匹配指定中文字符串的方法示例

本文实例讲述了Python使用中文正则表达式匹配指定中文字符串的方法.分享给大家供大家参考,具体如下: 业务场景: 从中文字句中匹配出指定的中文子字符串 .这样的情况我在工作中遇到非常多, 特梳理总结如下. 难点: 处理GBK和utf8之类的字符编码, 同时正则匹配Pattern中包含汉字,要汉字正常发挥作用,必须非常谨慎.推荐最好统一为utf8编码,如果不是这种最优情况,也有酌情处理. 往往一个具有普适性的正则表达式会简化程序和代码的处理,使过程简洁和事半功倍,这往往是高手和菜鸟最显著的差别.

Java语言程序设计(基础篇) 第四章 数学函数、字符和字符串

第四章 数学函数.字符和字符串 4.2 常用数学函数 方法分三类:三角函数方法(trigonometric method).指数函数方法(exponent method)和服务方法(service method) 4.4 String类型 String类型不是基本类型,而是引用类型(reference type).