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函数判断即可。