拈花小仙 发表于 2014-7-26 14:55:05

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-26 14:55:06

拈花小仙 发表于 2014-7-27 09:25
只是不知道这两种的区别

计算机显示文字最早使用ascii码来实现的。ascii码本质上是用一个8位(最高位为0)的整数来表示一个字母,数字或其它符号(详见ascii码表),这样,这个表最多可以和2^8=256个不同的字母数字对应。这个表主要是为英美等国服务的,因为对应的都是他们国家的字母。慢慢的,其它国家如中国也希望用计算机来表示汉字,但是汉字表示起来元素太多,256个数字不足以对应这些元素。。。于是大家就想到了用2个字符来表示一个汉字,这就是宽字符(一个宽字符其实就是unsigned short类型),这样就可以和2^16=65536个元素对应,一般情况下任何国家的语言都可以用这种宽字符对应。
但是,如果弃用原先的char而用宽字符,以前的程序就不能运行了。。。于是,就出现了TCHAR这种东西,使得经过简单的配置,程序既可以使用在char上又可以使用在宽字符上。

浮砂 发表于 2014-7-26 16:02:22

lstrlen是包含在 kernel32.dll里面的API函数
所以有W 和 A 之分

仰望天上的光 发表于 2014-7-27 08:54:33

是通用版本啊,比如你在程序里写了一个lstrlen
#ifdef UNICODE
#define lstrlenlstrlenW   //
#else
#define lstrlenlstrlenA
#endif         // !UNICODE
这个说明当定义了UNICODE的时候,lstrlen会被替换为lstrlenW;反之被替换为lstrlenA

拈花小仙 发表于 2014-7-27 09:06:07

仰望天上的光 发表于 2014-7-27 08:54
是通用版本啊,比如你在程序里写了一个lstrlen
#ifdef UNICODE
#define lstrlenlstrlenW   //


导师,为什么lstrlen是 lstrlenW 和lstrlenA的通常版本

lstrlenW和A与wcslen和strlen有什么区别呢?

feixiangmenghu 发表于 2014-7-27 09:22:57

一个是宽字符 一个是窄字符,一个是2个字节,一个是一个字节,你定义类型的时候用 text 或者L -T 来定义字符串

拈花小仙 发表于 2014-7-27 09:25:40

feixiangmenghu 发表于 2014-7-27 09:22
一个是宽字符 一个是窄字符,一个是2个字节,一个是一个字节,你定义类型的时候用 text 或者L -T 来定义字 ...

{:7_174:}只是不知道这两种的区别
页: [1]
查看完整版本: lstrlen为什么不是wcslen和strlen的通用版本?