回 帖 发 新 帖 刷新版面

主题:一个字符变量最长能有多长?

我经常用的是16383
除非Shell太多驱动程序进来,
一般不会出现什么问题
当我dim超过 30K 的时候就奇怪了
有时候这个数行得过去
有时候就不行,减减再加加就又可以了
最多只试到32704,有时候还通不过,
在说明那里好像看到一些什么 far string
却又捉摸不透
有哪位明白人能指点下吗?

回复列表 (共15个回复)

沙发

0--32767

板凳

QB的变量总容量是64KB,超过了就产生溢出错误。用dim V as string * N 这种定义方式定义时就要接受系统的审查;但用dim V as string 这种不定长的定义方式时,只是在给串变量V赋值时才受到系统的限制。

3 楼

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 楼

你用
dim s as string *32767
时,这一句能通过
而用
dim s as string *32768
时不能通过,就说明了审查的部分作用。

你后面叙述的现象,我也很困惑,我猜想可能是QB本身是16位系统,而我们用的计算机则是32位的,这样在内存地址的分配上可能会有一些影响,从而造成少量的误差。

另外,你的这一句:
dim s string * 32767   '------------这个值的疑问
少了个关键字as,应为:
dim s as string * 32767   '------------这个值的疑问

5 楼

喔,不好意思,人老了,忘的事就多了

猜想不太对,
我不知道你有没有在你的电脑上试验过,
但我可以很骄傲很自豪的告诉你,
我用QB7.1的那台电脑就是16位的DOS6.22

很多时候,
为了避免出错,
我也只好忍痛固定使用 16383 了

6 楼

Fre("")得到的是QB可用的剩余内存
但是QB自己预留一些给自己用
有些时候QB在储存字符串时因为得不到地址的连续空间
所以当字符串大到一定值时并不能得了我们所要的长度
它要用到一些字节用作寻址用,所以不能达到32767的理论长度

7 楼

如果用free basic可以把字符串弄很大,听syr说可以到4GB
我在win下实验最大只能是600mb左右!再大就出问题了!
这个版本的BASIC也有DOS板的,我实验的是WIN版本!

8 楼

"但我可以很骄傲很自豪的告诉你,
我用QB7.1的那台电脑就是16位的DOS6.22"



32位的机器可以运行16位的DOS
所以说你运行的16位的DOS也很可能就是32位的机器
现在想找个还能跑的16位机器可是不太容易了

9 楼

只要是纯DOS启动,
不管你是32位还是128位的机器,
兼容性是一样的。

10 楼

32位机也有实模式的,和16位的无异。现在那些8088,80286早都进废品堆了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册