鱼C论坛

 找回密码
 立即注册
查看: 3367|回复: 6

lstrlen为什么不是wcslen和strlen的通用版本?

[复制链接]
发表于 2014-7-26 14:55:05 | 显示全部楼层 |阅读模式
10鱼币
原来一直以为

#ifndef UNICODE

#define lstrlen strlen

#else   

#define lstrlen wcslen

#endif

--------------------------------------------

最后发现

#ifdef UNICODE
#define lstrlen  lstrlenW   //
#else
#define lstrlen  lstrlenA
#endif           // !UNICODE


最佳答案

查看完整内容

计算机显示文字最早使用ascii码来实现的。ascii码本质上是用一个8位(最高位为0)的整数来表示一个字母,数字或其它符号(详见ascii码表),这样,这个表最多可以和2^8=256个不同的字母数字对应。这个表主要是为英美等国服务的,因为对应的都是他们国家的字母。慢慢的,其它国家如中国也希望用计算机来表示汉字,但是汉字表示起来元素太多,256个数字不足以对应这些元素。。。于是大家就想到了用2个字符来表示一个汉字,这就是宽 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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上又可以使用在宽字符上。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-26 16:02:22 | 显示全部楼层
lstrlen是包含在 kernel32.dll里面的API函数
所以有W 和 A 之分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-27 08:54:33 | 显示全部楼层
是通用版本啊,比如你在程序里写了一个lstrlen
#ifdef UNICODE
#define lstrlen  lstrlenW   //
#else
#define lstrlen  lstrlenA
#endif           // !UNICODE
这个说明当定义了UNICODE的时候,lstrlen会被替换为lstrlenW;反之被替换为lstrlenA
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-7-27 09:06:07 | 显示全部楼层
仰望天上的光 发表于 2014-7-27 08:54
是通用版本啊,比如你在程序里写了一个lstrlen
#ifdef UNICODE
#define lstrlen  lstrlenW   //

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

lstrlenW和A  与wcslen和strlen有什么区别呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-27 09:22:57 | 显示全部楼层
一个是宽字符 一个是窄字符,一个是2个字节,一个是一个字节,你定义类型的时候用 text 或者L -T 来定义字符串
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-7-27 09:25:40 | 显示全部楼层
feixiangmenghu 发表于 2014-7-27 09:22
一个是宽字符 一个是窄字符,一个是2个字节,一个是一个字节,你定义类型的时候用 text 或者L -T 来定义字 ...

{:7_174:}只是不知道这两种的区别

点评

计算机显示文字最早使用ascii码来实现的。ascii码本质上是用一个8位(最高位为0)的整数来表示一个字母,数字或其它符号(详见ascii码表),这样,这个表最多可以和2^8=256个不同的字母数字对应。这个表主要是为英美  详情 回复 发表于 2014-7-27 10:48
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 16:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表