Dim strSrc As String * 20
    Dim strDst As String * 20
    
    Dim buffer() As Byte
    ReDim buffer(LenB(strSrc))
    
    strSrc = "HelloWorld"
    
    Print "生成源目标字符串:" & strSrc
    
    Print "正在拷贝到缓冲区..."
    CopyMemory buffer(0), strSrc, LenB(strSrc)
    Print "拷贝到缓冲区完成, 共" & LenB(strSrc) & "个字节"
    
    Print "正在拷贝到目标字符串"
    CopyMemory strDst, buffer(0), LenB(strDst)
    Print "拷贝到目标完成. 目标字符串:" & strDst
    
    Print "完成"

解决方案 »

  1.   

    直接這樣:
    CopyMemory strDst, strSrc, Len(strSrc)
      

  2.   

    CopyMemory strDst, strSrc, LenB(strSrc)
      

  3.   

    Len()返回的是字符串中字符的个数,对于不含中文字符的字符串,其返回值通常就等于该字符串的输出长度;LenB()返回的则是按照双字节字符集(DBCS)计算出的字符串所占用的字节数,对于纯中文字符组成的字符串,其返回值通常也等于该字符串的输出长度。但是,当字符串中既有中文又有英文(这里将数字等视为英文)字符时,二者的返回值都不等于该字符串的输出长度。比如:“A中国人”这个字符串,用Len()函数时将返回4;LenB()则返回8;而实际输出时(比如向某记录文件输出该字符串),它将占用7个印刷符(每个英文字符占1个,每个中文字符占2个)。
      

  4.   

    首先不赞成你用定长字符串(当然用也不是不可以),其次这么解决:
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
    Private Sub Command1_Click()
        Dim strSrc As String * 20
        Dim strDst As String * 20
        Dim buff() As Byte
        Dim buffer() As Byte
        ReDim buffer(LenB(strSrc) - 1)
        strSrc = "HelloWorld"
        Print "生成源目标字符串:" & strSrc
        Print "正在拷贝到缓冲区..."
        buff = strSrc
        CopyMemory buffer(0), buff(0), LenB(strSrc)
        Print "拷贝到缓冲区完成, 共" & LenB(strSrc) & "个字节"
        Print "正在拷贝到目标字符串"
        Dim buff1() As Byte
        ReDim buff1(LenB(strSrc) - 1)
        CopyMemory buff1(0), buffer(0), LenB(strDst)
        strDst = buff1
        Print "拷贝到目标完成. 目标字符串:" & strDst
        Print "完成"
    End Sub
      

  5.   

    我想主要应该是两个原因:
    1. lenB的使用,如同" lxcc(虫子|需要点勇气和信心)"讲解的,如果字符串中有汉字或全角字符,其结果肯定有错。
    2. 参数传递方式存在问题。在CopyMemort中不使用定长字符串是正确的,否则很麻烦。我做过两个函数,通常是这么用的, 现在给你:Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
    '**********************************************
    '   把字符串存入字节数组, 返回字符串的长度
    '**********************************************
    Private Function SaveStringToByteArry(strString As String, BytArray() As Byte) As Long
        Dim lngStrLen As Long
        
        '** 获取字符串的长度(字节)
        lngStrLen = LenB(StrConv(strString, vbFromUnicode))
        
        '** 分配数组空间
        ReDim BytArray(lngStrLen - 1)    '** 将字符串地址中的内容拷贝到数组
        CopyMemory BytArray(0), ByVal strString, lngStrLen
        
        SaveStringToByteArry = lngStrLen
    End Function'**********************************
    '   字节数组中的数据连接成字符串
    '**********************************
    Private Function CreateStringFromByte(ByteArray() As Byte, ByteLength As Long) As String
        Dim StringData As String
        
        '** 分配字符串空间
        StringData = Space(ByteLength)    '** 复制字符数组地址内容到字符串地址
        CopyMemory ByVal StringData, ByteArray(0), ByteLength
        
        '** 返回字符串
        CreateStringFromByte = StringData
    End Function