查看: 506  |  回复: 0
  VB6 VB/VBA判断字符串为空,这样更高效!
楼主
发表于 2024年3月23日 22:04

1、这是一个极为简单的问题,也是诸多好汉常遇到的问题。对于VB/#VBA#而言,不就是if Str="" then就了事了么,有何谈扯的!

2、若虎头虎脑的,也就罢了,因为VB/AVBA的设计,也不会让这种直白的方式犯错。但看过《VB/VBA字符串》后,还这么认为的,就有点不合格了。在这篇文章中说了,声明1个字符串变量Str,仅在栈上占了个4Bytes位置,是个空指针,就是什么都没有。

3、细想一下,""只不过是Size=0的字符串,也即0长字符串,它不是还有脑袋和尾巴么?这明明是存在的东西,怎么就和空指针画上等号了呢?这就是VB/VBA人性的一面,没内容的字符串不就是空字符串嘛!

4、从《VB/VBA字符串》一文里的示例中,可以看到,对刚声明的Str,用StrPtr函数取数据指针,返回值是0。但对""同样取数据指针却不为0。这就说明""是分配了内存的,只不过大小为6Btyes。

5、所以,比较表达式 Str="",算不算好的判断呢?你看背后做了哪些事就会明白:先给""常量分配一个临时内存,拷贝数据(无),然后调用字符串比较函数进行比较,最后返回结果,再释放分配的临时内存。这里面更别提编码转换之类的。可谓是绕了一个大圈子,才换来理解上的直白。

6、那有没有所谓更好的方法呢?其实从BSTR的结构入手即可。若要与Str=""等效,则用LenB函数进行判断。LenB函数就是直接获取BSTR结构体的Size成员的值。也即:if LenB(Str) = 0 then来代替,则简单高效了很多。

7、当然要判断字符串变量是否为未被初始化的那种空,则使用StrPtr函数判断即可。


您需要登录后才可以回帖 登录 | 立即注册
【本版规则】请勿发表违反国家法律的内容,否则会被冻结账号和删贴。
用户名: 立即注册
密码:
2020-2024 MaNongKu.com