有些怪异的现象,请高人指点一下。

chen_ny 2002-05-24 01:21:14
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _(Destination As Any, Source As Any, ByVal Length As Long)


Private Sub Command1_Click()

Dim aa As String
Dim Cc(100) As Byte
Dim adr As Long

aa = "1234567890"

adr = StrPtr(aa)
CopyMemory ByVal adr, Cc(0), 8
MsgBox aa

End Sub

Private Sub Command2_Click()

Dim aa As String * 10

Dim Cc(100) As Byte
Dim adr As Long

aa = "1234567890"

adr = StrPtr(aa)
CopyMemory ByVal adr, Cc(0), 8
MsgBox aa

End Sub

第一种情况aa的被修改都成为0
第二种则aa还是"1234567890"没有被修改
而两种情况的区别就是字符串定义时不同,这是什么原因?
...全文
30 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen_ny 2002-05-24
  • 打赏
  • 举报
回复
Private Sub Command2_Click()
Dim aa As String * 10
Dim Cc(100) As Byte
Dim adr As Long
aa = "1234567890"
adr = StrPtr(aa) - 4
CopyMemory Cc(0), ByVal adr, 24
End Sub

Cc的结果是
20 0 0 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0
56 0 57 0 48 0
所以我觉得StrPtr(aa)还是取到了定长字符串的地址阿
可不知到为什么用这个地址给aa拷贝数据就是拷贝不上
那位大侠知道定长字符串的存储方式阿
zyl910 2002-05-24
  • 打赏
  • 举报
回复
定长字符串不能用StrPtr
只能用VarPtr取得地址
wqb 2002-05-24
  • 打赏
  • 举报
回复
Private Sub Command2_Click()

Dim aa As String * 10

Dim Cc(100) As Byte
Dim adr As Long

aa = "1234567890"

'adr = StrPtr(aa)
CopyMemory ByVal aa, Cc(0), 8'///////
MsgBox aa

End Sub
估计是因为定长字符串的存储方式与普通字符串不同导致strptr不适用而致。

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧