注册 登录
编程论坛 VB6论坛

定长字符串在内存中的表示

邵帅 发布于 2013-12-12 09:53, 337 次点击
想实现以下功能
有定长字符串 假设为 dim str1 as string*10,str2 as string*10
有内存区域首地址为add ,dim add as long
想把str1先存入内存,再用其他字符串取出
程序代码:

str1="0123456789"
str2=string(10,0)
copymemory byval add,byval varptr(str1),lenb(str1)
copymemory byval varptr(str2),byval add,lenb(str2)

但运行出错,代码有问题?
直接对字符串赋值内存:copymemory byval varptr(str2),byval varptr(str1),lenb(str1)结果也是错误的

[ 本帖最后由 邵帅 于 2013-12-12 10:01 编辑 ]
6 回复
#2
bczgvip2013-12-12 10:58
strptr(str1)
#3
邵帅2013-12-12 11:08
回复 2楼 bczgvip
大哥你试了吗

copymemory byval strptr(str2),byval strptr(str1),lenb(str1)

没反应啊
#4
bczgvip2013-12-12 11:28
程序代码:
Option Explicit

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private Sub Form_Load()
    Dim str1 As String
    Dim str2 As String
    str1 = "0123456789"
    str2 = String$(10, 0)
    CopyMemory ByVal StrPtr(str2), ByVal StrPtr(str1), LenB(str2)
    Debug.Print str2
End Sub
就怎么不喜定义类型?
#5
邵帅2013-12-12 13:11
回复 4楼 bczgvip
不定长字符串,用你写的没有问题,关键是定长字符串不行啊。
#6
bczgvip2013-12-12 14:56
定长字符串,处理地址咱都没见过成功的。
#7
vhvihs06682021-07-31 16:04
VB中定长数组和定长字符串,作为参数传递的时候,vb会强制把它们转成动态数组和动态字符串,参数只一个临时变量。这时候varptr或strptr获得的地址都是这个临时变量的地址。
1