用动态数组做为参数,为什么出错了。帮我看一看,高手们!!(20分)

  • 主题发起人 主题发起人 microrain
  • 开始时间 开始时间
M

microrain

Unregistered / Unconfirmed
GUEST, unregistred user!

function getChangeData(Var myValue: array of char
ArraySize: integer
strValue: string): boolean;
var
i: integer;
tmpPchar: pchar;
begin
try

SetLength(myValue, ArraySize)
// 《==== 这里出错。怎么做才能不错呀,
tmpPchar := pchar(strValue);
for i := 0 to length(myValue)-1 do
begin
myValue := tmpPchar;
end;
result := true;

except
result := False;
end;

end;
 
SetLength(myValue, sizeof(myValue));
 
type
TMyChar = array of Char;

function getChangeData(Var myValue: TMyChar
ArraySize: integer
strValue: string): boolean;
var
i: integer;
tmpPchar: pchar;
begin
try
SetLength(myValue, ArraySize)

tmpPchar := pchar(strValue);
for i := 0 to length(myValue)-1 do
begin
myValue := tmpPchar;
end;
result := true;
except
result := False;
end;
end;
 
function getChangeData(Var myValue: PChar
ArraySize: integer
strValue: string): boolean;
var
i: integer;
tmpPchar: pchar;
begin
getMem(myValue,ArraySize+1);
try
tmpPchar := pchar(strValue);
for i := 0 to sizeOf(myValue) do
begin
myValue := tmpPchar;
end;
result := true;
except
result := False;
end;
end;
 
动态数组不能作为var参数来传递,你可以这样定义:
dynamicarray :pchar;
size:integer;
s:string;
getmem(dynamicarray,size);
s:=string(dynamicarray);
for i:=0 to length(s) do
showmessage(inttostr(s));
 
type
TMyvalue=array of char;

function getChangeData(Var myValue: TMyvalue
ArraySize: integer
strValue: string): boolean;
var
i: integer;
tmpPchar: pchar;
begin
try
SetLength(myValue, ArraySize)
// 《==== 这里出错。怎么做才能不错呀,
tmpPchar := pchar(strValue);
for i := 0 to length(myValue)-1 do
begin
myValue := tmpPchar;
end;
result := true;

except
result := False;
end;

end;


procedure TForm1.Button1Click(Sender: TObject);
var
ss:string;
begin
ss:='1234567890';
if getChangeData(TMyvalue(ss),10,'sss') then
showmessage('true')
else
showmessage('false')
end;


这样可以!但是你这么做是为了什么?
 
这个方法是为了给一个char类型的记录附字串值。


aaa array[0..4] of char 类型
 
用varArrayRedim呀.哪里用SetLength.
 
function getChangeData(Var myValue: TMyvalue
ArraySize: integer
strValue: string): boolean;
function getChangeData(Var myValue: array of char
ArraySize: integer
strValue: string): boolean;
其中的var myValue: array of char
这叫开放数组参数,可以把静态数组,动态数组
传递给它,当不能用SetLength改变作为开放数组参数传递来的动态数组的大小

而 TMyValue就是行的,这是动态数组类型
 
//这个方法是为了给一个char类型的记录附字串值。
那你直接用 StrCopy 不就行了?
StrCopy(myArryValue, PChar(strValue));
或:
StrLCopy(myArryValue, PChar(strValue), Length(strValue));
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
720
import
I
I
回复
0
查看
552
import
I
后退
顶部