《解读window核心编程》 之 字符和字符串处理方式
推荐的字符和字符串处理方式
- 開始将文本字符串想象为字符的数组,而不是 char 或字节的数组。
- 用通用数据类型(如 TCHAR/PTSTR )来表示文本字符和字符串。
- 用明白的数据类型(如 BYTE 和 PBYTE )来表示字节,字节指针和数据缓冲区。
- 用 TEXT 或 _T 宏来表示字面量字符和字符串。但为了保持一致性和更好的可读性,请避免两者混用;
- 运行全局替换(比如用 PTSTR 替换 PSTR ) ;
- 改动与字符串有关的计算。比如,函数常常希望我们传给它缓冲区打小的字符数。而不是字节数。这意味着我们应该传入 _countoof(szBuffer), 而不是 sizeof(szBuffer) 。
并且。假设须要为一个字符串分配一个内存块,并且知道字符串中的字符数,那么要 记住内存是以字节来分配的 。
- 避免使用 printf 系列函数,正确的做法是使用 MultiByteToWideChar 和WideCharToMultiByte 函数。
- Unicode和_ Unicode符号要么同一时候指定。要么都不指定。
对于字符串处理函数,应该遵循下面基本准则:
- 始终使用安全的字符串处理函数,比方后缀为 _s 的函数,或者前缀为 StringCch 的函数。后者主要在我们想明白控制截断的时候使用了假设不像明白控制截断,首选前者。
- 利用 /GS 和 /RTCs 编译器标志来自己主动检測缓冲区溢出。
- 不要使用 Kernel32 方法来进行字符串处理,比方 lstrcat 和 lstrcpy 。
- 在应用程序的代码中,须要比較两种字符串,应使用 CompareStringOrdinal(注冊表)CompareString(用户字符串) 来进行比較。
《解读window核心编程》 之 字符和字符串处理方式的更多相关文章
- 《解读window核心编程》 之 进程
1. 进程是执行文件的运行时形态.包括两部分:内核数据(对应内核对象).地址空间(包括执行文件代码和栈堆等动态内存). 2. 把VC的“系统-子系统”值删除掉,即不指定 ...
- 《解读window核心编程》 之 注冊表
1 注冊表的作用及组织形式 Windows系统使用注冊表来存储系统和应用程序配置数据.非常多系统和应用程序重要的配置的信息都存储在注冊表中. 注冊表是一种以树型结构组织的数据库.树的每个节点称 作键( ...
- Windows核心编程笔记之处理字符串
0x01 ANSI 和宽字符定义 // ANSI 字符定义 CHAR varChar_1 = 'a'; // #typedef char CHAR CHAR varChar_2[] = "A ...
- windows核心编程-信号量(semaphore)
线程同步的方式主要有:临界区.互斥区.事件.信号量四种方式. 前边讲过了互斥器线程同步-----windows核心编程-互斥器(Mutexes),这章我来介绍一下信号量(semaphore)线程同步. ...
- java.sql.Exception:setString 只能处理少于 32766 个字符的字符串
java.sql.Exception:setString 只能处理少于 32766 个字符的字符串 解决方式是 : 升级ojdbc的版本, 将原来的 ojdbc14_10.2.0.2.0.jar ...
- windows核心编程---第二章 字符和字符串处理
使用vc编程时项目-->属性-->常规栏下我们可以设置项目字符集合,它可以是ANSI(多字节)字符集,也可以是unicode字符集.一般情况下说Unicode都是指UTF-16.也 ...
- Windows核心编程第二章,字符串的表示以及宽窄字符的转换
目录 Windows核心编程,字符串的表示以及宽窄字符的转换 1.字符集 1.1.双字节字符集DBCS 1.2 Unicode字符集 1.3 UTF-8编码 1.4 UTF - 32编码. 1.5 U ...
- Windows核心编程:第2章 字符和字符串处理
Github https://github.com/gongluck/Windows-Core-Program.git //第2章 字符和字符串处理.cpp: 定义应用程序的入口点. // #incl ...
- 用Java编程找到两个字符串中共有的字符
这道题的算法思想是把字符串1中的每个字符与字符串2中的每个字符进行比较,遇到共同拥有的字符,放入另一个数组中,最后顺序输出即可 但是这道题的难点在于怎么排除重复的字符 public class bot ...
随机推荐
- 移动端兼容 - faskclick.js
fasckclick为解决移动端300ms延迟而生 github地址为:https://github.com/ftlabs/fastclick 使用方法: 1. 原生使用(window.onload或 ...
- 【java读书笔记】JSTL,高速精通
JSTL并非什么新颖的技术并且非常easy,甚至有人觉得JSTL已经过时了.可是我觉得它既然存在,就有存在的道理.作为技术人员就应该知道它们是什么,怎么使用,有什么长处. JSTL包括两部分:标签库和 ...
- python解析发往本机的数据包示例 (解析数据包)
tcp.py # -*- coding: cp936 -*- import socket from struct import * from time import ctime,sleep from ...
- 转:C#委托与事件
委托与事件 Ganesh Nataraj最近写了一篇解释委托与事件的文章,在坊间流传较广,今天翻译成中文与大家共享,如有不妥之处,欢迎留言讨论. C#中的委托类似于C或C++中的函数指针. ...
- sqlserver profiler 抓出来作业的代码 SQLAgent - TSQL JobStep,二进制作业名字转化为字段串作业名字,job_id
sqlserver 中 profiler 抓出来不少是作业中的代码,applicationname 类似于 SQLAgent - TSQL JobStep (Job 0x94B9B5C016E8D94 ...
- Linux 系统文件类型
在Linux中只有一下7种文件类型 1.普通文件(-表示,可用ls -l查看) 2.目录(d)[在linux中,任何东西都被看成文件,外设备也看成文件,注意是任何东西] 3.字符设备文件(c) 4.块 ...
- 文本挖掘之文本聚类(OPTICS)
刘 勇 Email:lyssym@sina.com 简介 鉴于DBSCAN算法对输入参数,邻域半径E和阈值M比较敏感,在参数调优时比较麻烦,因此本文对另一种基于密度的聚类算法OPTICS(Order ...
- 如何在 Linux 下调试动态链接库
大家都知道在 Linux 可以用 gdb 来调试应用程序,当然前提是用 gcc 编译程序时要加上 -g 参数.我这篇文章里将讨论一下用 gdb 来调试动态链接库的问题. 首先,假设我们准备这样的一个动 ...
- 各大主流.Net的IOC框架
Autofac下载地址:http://code.google.com/p/autofac/ Castle Windsor下载地址:http://sourceforge.net/projects/cas ...
- Integer 内部实现
public static void main(String[] args) { Integer in1 = 128; Integer in2 = 128; System.out.println(in ...