今天做了一个字符串在内存中存储的实验,实验结果见正文
2018-01-21 23:11
225 查看
Private Sub Command3_Click() Dim s As String, s1 As String Dim ps As Long, pv As Long, pt As Long, tmp As Long, tmp1 As Long, ps1 As Long Dim i As Integer s1 = "1234567890abcdefghijklmno": s = "ABCDEFGHI" ps = StrPtr(s): pv = VarPtr(s): pt = ps - 4: ps1 = StrPtr(s1) Print vbCrLf; vbCrLf Print "两个字符串初始值 s:"; s; " 长度:"; LenB(s), "s1:"; s1; " 长度:"; LenB(s1); vbCrLf Print "取字符串长度值前 StrPtr(s):"; ps; " VarPtr(s):"; pv; " ps - 4:"; pt; " tmp:"; tmp, " tmp1:"; tmp1; vbCrLf CopyMemoryL VarPtr(tmp), pt, 4 Print "取字符串长度值后 StrPtr(s):"; ps; " VarPtr(s):"; pv; " ps - 4:"; pt; " tmp:"; tmp, " tmp1:"; tmp1; vbCrLf CopyMemoryL VarPtr(tmp1), pv, 4 Print "取s变量地址值后 StrPtr(s):"; ps; " VarPtr(s):"; pv; " ps - 4:"; pt; " tmp:"; tmp, " tmp1:"; tmp1; vbCrLf CopyMemoryL pv, VarPtr(ps1), 4 Print "改变s变量地址内容后 StrPtr(s):"; ps; " VarPtr(s):"; pv; " ps - 4:"; pt; " tmp:"; tmp, " tmp1:"; tmp1; vbCrLf Print "改变s变量地址内容后两个变量值 s:"; s; " 长度:"; LenB(s), "s1:"; s1; " 长度:"; LenB(s1); vbCrLf Dim s2 As String s2 = s1 pv = (StrPtr(s2) - 4) CopyMemoryL VarPtr(tmp), pv, 4 Print "s1赋s2后各项值 StrPtr(s):"; ps; " VarPtr(s):"; pv; " ps - 4:"; pt; " s2内存长度值:"; tmp; vbCrLf Print "打印三个字符 s串:"; s; " s1串:"; s1; " s2串:"; s2 End Sub
原来以为s字符串在内存中保存的字符长度是18,只能显示18个有效字符,但通过输出结果看,这个内存长度
值好像仅是记录原始字符串的长度,当该字符串缓冲地址发生改变后,没有人为改变那个内存长度值时,也能正常
显示出最终字符串值,看来vb取字符串时是检测到两个字节00 00结束符为止,不按内存保存的长度值来取字符串。
相关文章推荐
- 编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。
- 建立一个存储和处理字符串的类DelCharStr。构造函数:动态申请存储字符串所需内存空间,并且即能用指定的字符串也能用默认的值0为所声明的对象进行初始化。
- 编写一个函数,此函数使用动态存储分配来产生一个字符串的副本。例如函数为strclone,则调用p=strclone(str),将会为一个新的字符串分配和str占内存大小相同的一个字符串,并将字符串st
- 今天开始学Java 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。
- 习题 8.19(1) 编写一个函数new,对n个字符开辟连续的存储空间,此函数应返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节的内存空间。
- 编写一个程序,将两个字符串链接起来,结果取代第一个字符串。要求用方法
- 一个 -100.01 的double 在内存中怎么存储的. 一个中文String 在内存中占多少直接 utf-8 / GBK
- 分配buffer用来存储字符串时,始终多分配一个字符,make all string functions HAPPY!
- python:输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。
- 今天做了一个导入,分别导入xlsx和csv格式的文件,看看用时和内存情况吧
- 取得一个字符串表达式的计算结果(实现方法一)
- 将一个文件中的内容存储在一个String字符串中
- 问题描述如下: 有2.5亿个整数(这2.5亿个整数存储在一个数组里面,至于数组是放在外存还是内存,没有进一步具体说明); 要求找出这2.5亿个数字里面,不重复的数字的个数; 另外,可用的内存限定为600M; 要求算法尽量高效,最优;
- 在控制台上输入一个字符串,将其中夹杂的字母去除,只剩数字,然后对对这些数字进行全排列,输出全排列结果
- 在一个存储过程A中调用另外一个存储过程B返回的结果集
- 求一个包加减乘除和小括号的字符串的结果
- 通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。 比如字符串“abacacde”过滤结果为“abcde”。
- 新生成了一个PCB,竟然需要700多兆内存才能打开,而且存储非常缓慢
- 实现一个函数翻转字符串(将一个字符串的内容,逆序存储)
- 从键盘输入一个由字母构成的字符串(不大于30个字符),要求从该串中取出3个不重复的字符,求所有不同的取法。如果字符串中没有取到3个不同的字符,则提示没有结果。对取出的字符要求按字母升序排列成串,对于不