delphi中函数返回数组问题
functionTForm1.decrypt(FileName:string):word;varf,nRead,k,i:integer;buf:word;equalbuf...
function TForm1.decrypt(FileName: string):word;
var
f, nRead, k, i: integer;
buf: word;
equalbuf:word;
destfile:file;
fname:string;
buffer:wordArr;
const txtarr: array[0..7] of word=(
$6D66,$0985,$219E,$3DBC,$55D5,$6DEF,$0609,$1E22);
begin
i := 0;
// k := 0;
f := FileOpen(filename, fmOpenRead);
repeat
nRead := FileRead(f, Buf, SizeOf(Buf));
if nRead < 0 then
begin
FileClose(f);
Exit;
end
else if nRead > 0 then
begin
equalbuf := buf - txtarr[i];
if equalbuf<0 then
equalbuf := equalbuf + 65536;
result := equalbuf;
inc(i);
if i>=256 then
i := 0;
end;
until (nRead = 0);
FileClose(f);
end;
这是我写的一个函数。。但是现在只能返回最后一个equalbuf。。我想返回一个数组,把所有的equalbuf都保存在数组中,应该怎么写。? 展开
var
f, nRead, k, i: integer;
buf: word;
equalbuf:word;
destfile:file;
fname:string;
buffer:wordArr;
const txtarr: array[0..7] of word=(
$6D66,$0985,$219E,$3DBC,$55D5,$6DEF,$0609,$1E22);
begin
i := 0;
// k := 0;
f := FileOpen(filename, fmOpenRead);
repeat
nRead := FileRead(f, Buf, SizeOf(Buf));
if nRead < 0 then
begin
FileClose(f);
Exit;
end
else if nRead > 0 then
begin
equalbuf := buf - txtarr[i];
if equalbuf<0 then
equalbuf := equalbuf + 65536;
result := equalbuf;
inc(i);
if i>=256 then
i := 0;
end;
until (nRead = 0);
FileClose(f);
end;
这是我写的一个函数。。但是现在只能返回最后一个equalbuf。。我想返回一个数组,把所有的equalbuf都保存在数组中,应该怎么写。? 展开
2个回答
展开全部
你定义的函数不是返回数组类型的,只是返回一个word
//首先定义一个数组类型
type
TArr = array of integer;
//然后定义返回这个数组类型的函数
function strSplit(strSplit,str:string):TArr ;
var
str: array[1..2] of integer;
i: integer;
begin
str[1]:=0;
str[2]:=1;
for i:= 1 to 2 do
result[i]:=strl[i];
end;
应该可以的,你再试试看
//首先定义一个数组类型
type
TArr = array of integer;
//然后定义返回这个数组类型的函数
function strSplit(strSplit,str:string):TArr ;
var
str: array[1..2] of integer;
i: integer;
begin
str[1]:=0;
str[2]:=1;
for i:= 1 to 2 do
result[i]:=strl[i];
end;
应该可以的,你再试试看
展开全部
方法有二:
1、返回动态数组(如楼上意见),但需要在给数组元素赋值之前,申请空间,调用SetLength,楼上的忽略了这句,必然出现数据访问异常;调用SetLength也有两种方案,其一是每收集一个,就申请扩大一次,再来赋值,其二是批量申请一批,例如一批几百个,在未超越几百个时,可以随时赋值,当达到数据长度极限时,再次批量申请,最后根据实际收集到的元素个数,重新设定一次长度。
2、返回足够大的静态数组,要求预先定义一个足够大的数组类型和变量(根据需要而定,例如假设文件不大,估计不会超过1万个数儿,就定为10000),以变量作为参数传入(var传指针),函数处理时可以随意赋值,但需要通过返回值指明实际上收集到的元素个数。
1、返回动态数组(如楼上意见),但需要在给数组元素赋值之前,申请空间,调用SetLength,楼上的忽略了这句,必然出现数据访问异常;调用SetLength也有两种方案,其一是每收集一个,就申请扩大一次,再来赋值,其二是批量申请一批,例如一批几百个,在未超越几百个时,可以随时赋值,当达到数据长度极限时,再次批量申请,最后根据实际收集到的元素个数,重新设定一次长度。
2、返回足够大的静态数组,要求预先定义一个足够大的数组类型和变量(根据需要而定,例如假设文件不大,估计不会超过1万个数儿,就定为10000),以变量作为参数传入(var传指针),函数处理时可以随意赋值,但需要通过返回值指明实际上收集到的元素个数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询