主题:一个字符变量最长能有多长?
moz
[专家分:37620] 发布于 2005-09-11 20:29:00
我经常用的是16383
除非Shell太多驱动程序进来,
一般不会出现什么问题
当我dim超过 30K 的时候就奇怪了
有时候这个数行得过去
有时候就不行,减减再加加就又可以了
最多只试到32704,有时候还通不过,
在说明那里好像看到一些什么 far string
却又捉摸不透
有哪位明白人能指点下吗?
回复列表 (共15个回复)
沙发
staa [专家分:3690] 发布于 2005-09-11 22:31:00
0--32767
板凳
staa [专家分:3690] 发布于 2005-09-12 00:01:00
QB的变量总容量是64KB,超过了就产生溢出错误。用dim V as string * N 这种定义方式定义时就要接受系统的审查;但用dim V as string 这种不定长的定义方式时,只是在给串变量V赋值时才受到系统的限制。
3 楼
moz [专家分:37620] 发布于 2005-09-12 13:51:00
1. N 只允许是常数值,而不可以是表达式或变量
2. dim V as string * N 的时候,系统审查是怎样审查的?
好像不太对喔,出错就是 Out of memory 内存溢出了
请看程序:
cls
print fre("")
dim s as string * 32767 '------------这个值的疑问
s=string$(16383,"1")+string$(16383,"2")
print mid$(s,16380,10);fre("")
试验的结果不一定:
32767 改30000 改32000 改31000 改31500 改31900 改32000 改32767 改32700
出错 通过 出错 通过 通过 通过 通过 出错 通过
fre都是64K,那你说说,这是哪个世界的道理?
4 楼
staa [专家分:3690] 发布于 2005-09-12 17:03:00
你用
dim s as string *32767
时,这一句能通过
而用
dim s as string *32768
时不能通过,就说明了审查的部分作用。
你后面叙述的现象,我也很困惑,我猜想可能是QB本身是16位系统,而我们用的计算机则是32位的,这样在内存地址的分配上可能会有一些影响,从而造成少量的误差。
另外,你的这一句:
dim s string * 32767 '------------这个值的疑问
少了个关键字as,应为:
dim s as string * 32767 '------------这个值的疑问
5 楼
moz [专家分:37620] 发布于 2005-09-12 19:36:00
喔,不好意思,人老了,忘的事就多了
猜想不太对,
我不知道你有没有在你的电脑上试验过,
但我可以很骄傲很自豪的告诉你,
我用QB7.1的那台电脑就是16位的DOS6.22
很多时候,
为了避免出错,
我也只好忍痛固定使用 16383 了
6 楼
QB71 [专家分:1300] 发布于 2005-09-13 14:38:00
Fre("")得到的是QB可用的剩余内存
但是QB自己预留一些给自己用
有些时候QB在储存字符串时因为得不到地址的连续空间
所以当字符串大到一定值时并不能得了我们所要的长度
它要用到一些字节用作寻址用,所以不能达到32767的理论长度
7 楼
qb45 [专家分:2880] 发布于 2005-09-13 14:47:00
如果用free basic可以把字符串弄很大,听syr说可以到4GB
我在win下实验最大只能是600mb左右!再大就出问题了!
这个版本的BASIC也有DOS板的,我实验的是WIN版本!
8 楼
staa [专家分:3690] 发布于 2008-09-09 16:55:00
"但我可以很骄傲很自豪的告诉你,
我用QB7.1的那台电脑就是16位的DOS6.22"
32位的机器可以运行16位的DOS
所以说你运行的16位的DOS也很可能就是32位的机器
现在想找个还能跑的16位机器可是不太容易了
9 楼
moz [专家分:37620] 发布于 2008-09-09 17:03:00
只要是纯DOS启动,
不管你是32位还是128位的机器,
兼容性是一样的。
10 楼
我是大喊三 [专家分:3010] 发布于 2008-09-09 21:11:00
32位机也有实模式的,和16位的无异。现在那些8088,80286早都进废品堆了。
我来回复