字符串存储格式影响着编程使用,C格式字符串是以 \0 作为结束符,其长度可以由此计算,而VB格式的字符串其长度存于字符串前缀之中。不仅如此,字符串编码方式 ansi, unicode, widestring, dbcs, sbcs 这些概念也影响着长度计算。下面用VB6程序对它们进行剖析验证。
首先记住下面这个界面,后面要用到这些控件的名称。

下面Command1的代码,分析了ByRef传递的地址。
解释:首先定义局部字符串并赋值,在 Text1中显示字符串的VarPtr,这是字符变量的在STACK中的地址,然后将字符串作为参数调用下面的过程,过程中用了 ByRef A as string, 在过程中 Text2显示变量A的地址VarPtr。
Private Sub Command1_Click()
Dim Astring As String
Astring = "Hello World!"
Text1.Text = CVar(VarPtr(Astring))
Call VarTest1(Astring)
Text6.Text = Astring
End Sub
Sub VarTest1(ByRef A As String)
Text2.Text = CVar(VarPtr(A))
A = "It's Changed!"
End Sub
运行上述程序,结果如下。它验证了Byref传递的是字符串变量的地址,相当于C中的别名,变量A是变量Astring的别名,它们有相同的地址。即然地址相同,那对A赋值,Astring会发生同样的变化,因为它们是同一地址。

文章探讨了VB编程中字符串的存储形式(如C和VB格式),涉及地址计算、编码(ansi,unicode等)以及不同类型的字符串长度处理。通过实例展示了VarPtr和StrPtr的使用,以及字符串编码对长度计算的影响,并提倡在不同语言间传递参数时避免使用字符串,推荐使用字节数组或指针来提高效率。
最低0.47元/天 解锁文章
1508

被折叠的 条评论
为什么被折叠?



