函数结构调用出错,请帮助(100分)

  • 主题发起人 主题发起人 leeeeleeee
  • 开始时间 开始时间
L

leeeeleeee

Unregistered / Unconfirmed
GUEST, unregistred user!
TMessage = record
Title :array[0..63] of char;
Time :array[0..63] of char;
Content :array[0..255] of char;
end;
有个函数
function ReadMessage(piMess: TMessage):Integer;

现在调用:
procedure Tm1.Button1Click(Sender: TObject);
var piM:TMessage;
begin
ReadMessage(piM);
Memo2.Text:=Memo2.Text+piM.Title +' '+piM.Time+' '+piM.Content;
end;
好像错误很多,不好意思~~
1.没有初始化piM,8会
2.第二行显示也应该有问题

请协助,谢谢
 
有个函数
function ReadMessage(piMess: TMessage):Integer;


这个函数是怎么写的啊
 
function ReadMessage(piMess: TMessage):Integer;
是一个封闭的函数,偶也不清楚。。。
 
TMessage = record
Title :array[0..63] of char;
Time :array[0..63] of char;
Content :array[0..255] of char;
end;
TMyMessage = TMessage^;

var
pim : TMyMessage ;

new(pim)
 
function ReadMessage(piMess: TMessage):Integer;
piMess是作为返回值(或者叫输出值)返回给外部程序的吗?还是piMess是外部程序调用的时候,传递的参数,仅仅在ReadMessage里面使用?如果是前者,piMess必须在前面加var关键字,如果是后者,你在调用之前必须初始化piMess,因为在栈内的空间是不被清零的,值可能是随机任意的.
 
第一点楼上说的非常好
第二点的有不足的地方是:
1,数组需要初始化,比如pim.Title:=chr(0);
2,返回调用时如果数组的某个部分为Chr(0)或者其他不可见字符,你的显示就有问题,所以至少要去掉前导的Chr(0)以全部显示,除非你别有要求
如下:
procedure TForm1.FormCreate(Sender: TObject);
var i:Integer;
begin
new(pim);
for i:=48 to 57 do
pim.Title[i-48]:=Chr(i);//然后用pim.Title:=Chr(i);试试
for i:=65 to 90 do
pim.Time[i-65]:=Chr(i);
for i:=97 to 122 do
pim.Content[i-97]:=Chr(i);//然后用pim.Content:=Chr(i);试试
pim.Title[1]:=Chr(0);或者pim.Title[0]:=Chr(0);或者取消这一行
showmessage(pim.Title[0]);
showmessage(AA.Title);
showmessage(AA.Time);
showmessage(AA.Content);
end;
 
TMessage = record
Title :array[0..63] of char;
Time :array[0..63] of char;
Content :array[0..255] of char;
end;
有个函数
function ReadMessage(piMess: TMessage):Integer;

现在调用:
procedure Tm1.Button1Click(Sender: TObject);
var piM:TMessage;
begin
ReadMessage(piM);
Memo2.Text:=Memo2.Text+piM.Title +' '+piM.Time+' '+piM.Content;
end;
好像错误很多,不好意思~~
1.没有初始化piM,8会
2.第二行显示也应该有问题

请协助,谢谢
=====================================
这个初不初始化没有关系,函数之所以没有返回正确的结果,是因为参数没有被定义成变参,改成这样就OK了:

function ReadMessage(var piMess: TMessage):Integer;
 
后退
顶部