shortstring的问题!!!(5分)

  • 主题发起人 主题发起人 3333W
  • 开始时间 开始时间
3

3333W

Unregistered / Unconfirmed
GUEST, unregistred user!
如何才能访问长度字节的数据。
如我定义了S为SHORTSTRING,但是我用S[0]访问到的却不是这个字符串的长度。
要如何才能访问呢!
 
s[0]访问到的是string,不是长度。
 
但是如何才能直接从它的长度字节里获取长度信息呢???
再说不是只能到255个字吗加一个长度信息,可为什么我数了一下有256个字。
这个长度信息到底在那,怎么访问???!!
 
好像只有shortstring可以这样,d6的string与pchar差不多了,用Length(s)吧
 
奇怪了! 我用了length(s)结果设成256的长度,最后获取得只有82个,怎么回事?!
 
呵呵 Ord(S[0]) 就是它的长度了:)
ShowMessage('长度是:' + IntToStr(Ord(S[0])));
 
var
s:string[255];
i,j:integer;
showmm:Ansistring;
begin
for j:=0 to 0 do
begin
for i:=0 to 255 do
begin
s:='R';
showmm:=showmm+s+' ';
end;
showmm:=showmm+s+#10#13;
end;
showmessage(showmm);
showmessage(inttostr(ord(s[0])));
end.
为什么是82个!!! 考!! [?][?][?][?][?]
 
别“考”,你这样个赋值方法,当然是 82 了:)

看看你的循环里面的第一句:s := 'R'
即 s[0] := 'R';
而 s[0] 是存放长度的,你赋个 'R' 给他,就是告诉他长度为 Ord('R') = 82 :)
不信你再 s[0] := 'S'
肯定长度就是 83 了:)
在你的循环里面把第二层循环 也就是 i 循环的起始值改为 1 即可。
 
改过了!没用!还是82个嘛?[?][?][?]
 
改成如下也不行!!!
var
s:String[9];
begin
s[1]:='A';
s[2]:='R';
s[3]:='T';
showmessage(inttostr(Ord(s[0])));
showmessage(inttostr(length(s)));
end;
最后都显示为0个??
但把9改成6就变成了13个了??
任意改,但最终结果就是不对劲!!
到底是为什么呀!!!! [?][?][?]
 
shortstring在[0]存放长度信息。
不过你直接访问它的元素,它怎么会知道你变了什么?
s:string[9];
s:='art';
showmessage(inttostr(Ord(s[0])));
showmessage(inttostr(length(s)));
你看看是什么?

你直接赋值给[0]元素,就是在改长度。
ord('R')就是82
 
是不是就是说,不能直接访问这个字符串各个元素!!!???[^]
 
当然不是。
s:string[9];

s:='art';
s[1]:='b';
showmessage(s);
显示brt,

但是你总得让系统知道你的字符串的真实长度,是吧?
 
//是不是就是说,不能直接访问这个字符串各个元素
不是,我是说最后不要通过直接访问各个字符元素的方法来赋值
(在你需要取得其赋值后的长度的情况下)
你这样:
var
s: string[9];
begin
s := 'abc';
showmessage(inttostr(ord(s[0])))
//肯定是 3
end;
 
for i:=0 to 255 do
改为:
for i:=1 to 255 do
 
多人接受答案了。
 
后退
顶部