lstrlen为什么不是wcslen和strlen的通用版本?
原来一直以为#ifndef UNICODE
#define lstrlen strlen
#else
#define lstrlen wcslen
#endif
--------------------------------------------
最后发现
#ifdef UNICODE
#define lstrlenlstrlenW //
#else
#define lstrlenlstrlenA
#endif // !UNICODE
C++编程小组 拈花小仙 发表于 2014-7-27 09:25
只是不知道这两种的区别
计算机显示文字最早使用ascii码来实现的。ascii码本质上是用一个8位(最高位为0)的整数来表示一个字母,数字或其它符号(详见ascii码表),这样,这个表最多可以和2^8=256个不同的字母数字对应。这个表主要是为英美等国服务的,因为对应的都是他们国家的字母。慢慢的,其它国家如中国也希望用计算机来表示汉字,但是汉字表示起来元素太多,256个数字不足以对应这些元素。。。于是大家就想到了用2个字符来表示一个汉字,这就是宽字符(一个宽字符其实就是unsigned short类型),这样就可以和2^16=65536个元素对应,一般情况下任何国家的语言都可以用这种宽字符对应。
但是,如果弃用原先的char而用宽字符,以前的程序就不能运行了。。。于是,就出现了TCHAR这种东西,使得经过简单的配置,程序既可以使用在char上又可以使用在宽字符上。 lstrlen是包含在 kernel32.dll里面的API函数
所以有W 和 A 之分 是通用版本啊,比如你在程序里写了一个lstrlen
#ifdef UNICODE
#define lstrlenlstrlenW //
#else
#define lstrlenlstrlenA
#endif // !UNICODE
这个说明当定义了UNICODE的时候,lstrlen会被替换为lstrlenW;反之被替换为lstrlenA 仰望天上的光 发表于 2014-7-27 08:54
是通用版本啊,比如你在程序里写了一个lstrlen
#ifdef UNICODE
#define lstrlenlstrlenW //
导师,为什么lstrlen是 lstrlenW 和lstrlenA的通常版本
lstrlenW和A与wcslen和strlen有什么区别呢? 一个是宽字符 一个是窄字符,一个是2个字节,一个是一个字节,你定义类型的时候用 text 或者L -T 来定义字符串 feixiangmenghu 发表于 2014-7-27 09:22
一个是宽字符 一个是窄字符,一个是2个字节,一个是一个字节,你定义类型的时候用 text 或者L -T 来定义字 ...
{:7_174:}只是不知道这两种的区别
页:
[1]