本文主要是介绍在VB6中用CopyMemory拷贝字符串的种种猫腻(三),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
版权声明:可以任意转载,转载时请务必以超链接形式标明如下文章原始出处和作者信息及本声明
作者:xixi
出处:http://blog.csdn.net/slowgrace/archive/2009/09/14/4550293.aspx
本文来自此帖的冗长讨论,感谢Tiger_Zhao的全程指点和陈辉、阿勇、马云剑等很多朋友的热心参与。本文其他部分在:(一)、(二)、(四)。
3.4 King06在10楼的代码——错误的代码正确的结果
再来看这段代码:
CopyMemory pString1, ByVal VarPtr(String1), 4
CopyMemory String2, pString1, 14
可以说和老魏的代码有异曲同工之妙。看第2个CopyMemory,又是从一个Long型变量地址拷14字节,我打眼一望,判断结果是乱码,可是没成想结果居然是浮肿型的非乱码。不废话,比葫芦画瓢,看下面的代码注释吧:
所以,10楼的代码也是属于瞎猫碰上死老鼠,“实际上是在胡乱操作内存”。不过这个代码没有老魏的代码狠。老魏的代码如果把变量次序换换就不能得到正确结果,甚至会VB挂掉。
而这个不会。这个变量次序无论怎么折腾,从pString1拷到的14字节中的头4字节总是String1的字符串缓冲区指针,也就是说_tmp2总是能得到这个指针,虽然后面的10字节就不定是啥了。这个代码貌似在拷字符串缓冲区,可实质上却是通过拷贝字符串缓冲区指针得到了基本正确的结果。这个乱啊……
3.5 我在34楼的代码——中英文混杂的字符串如何算字节数
看下面这段代码。
这段代码的输出结果是我有点S*,没能完全地把“我有点Slow”这个字符串拷出来。这是为什
这篇关于在VB6中用CopyMemory拷贝字符串的种种猫腻(三)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!