为什么不能给字符串赋值呢?(50分)

  • 主题发起人 主题发起人 delphi菜菜鸟
  • 开始时间 开始时间
D

delphi菜菜鸟

Unregistered / Unconfirmed
GUEST, unregistred user!
有一个对字符串加密的函数jiami如下:
function jiami(input:string;key:word):string;
var
i:integer;
begin
for i:=1 to length(input) do
result:=char(byte(input) xor (key shr 8));
end;

可为什么每次执行到result:=char(byte(input) xor (key shr 8));就报错呢?
我初学delphi还忘各位大虾多多指点!!
分不多了!见谅!
 
先 setlength(Result, length(input));
然后再调用 result:=char(byte(input) xor (key shr 8));
就可以了。
 
能告诉我这是为什么吗?
 
因为你没有初始化Result呀,系统不知道他的长度,因此Resutl[1],Result[2]都是非法调用
而setlength就给Result确定了一个长度,这样就可以访问这个长度范围内的元素啊。
 
正如beta所言,没有初始化怎能直接调用?
 
你这么做相当于把result当作是字符的动态数组,动态数组在赋值前必须设置长度。
 
function jiami(input:string;key:word):string;
var
i:integer;
str:string[255];
begin
for i:=1 to length(input) do
str:=char(byte(input) xor (key shr 8));
result := str

end;
 
这样修改:
function jiami(input:string;key:word):string;
var
i:integer;
begin
result := '';
for i:=1 to length(input) do
result := result + char(byte(input) xor (key shr 8));
end;
 
哦!
上了一课,谢谢大家!!
真想给每人都加上100分,可就这么点了,像我等菜鸟只有送分得份,所以比较贫困啦!!
 
接受答案了.
 
后退
顶部