请教TFileStream的问题.(100分)

  • 主题发起人 主题发起人 c4
  • 开始时间 开始时间
C

c4

Unregistered / Unconfirmed
GUEST, unregistred user!
前些天按书试一个例子
书上的原程序大致如下:

procedure TTile.SaveToFile(FileName:string);
var
fs:TFileStream;
s:string
begin
fs:=TFileStream.create(FileName,fmcreate or fmopenwrite);
try
fs.write(SIG_MYFILE,Length(SIG_MYFILE));
s:=ClassName;
fs.write(s[1],Length(s));
...
finally
free;
end;
输入时,因粗心把fs.write(s[1],Length(s))输成fs.write(s,Length(s)),结果当然不正确.
但是编译时,并不报错.那么
(1)原书中s[1]和我输错的s该怎么理解?
(2)TFilestream的write函数中
{function Write(const Buffer
Count: Longint): Longint
override;}
const buffer该怎么理解?(我只知道这是无类型参数,buffer是缓冲区,但进一步该怎么
理解,指针还是其它的?)

 
老大能不能解释的详细点?
 
s[1] 就是s的第一个字符,s是字符串.
buffer可以是任何类型.
 
to nick4309:
你所说的,我都知道.
举个例子:
s:='TTile'
那么在fs.write(s[1],length(s))和fs.write(s,lenth(s))两种情况下,写入流文件的分别
是哪些数据?
 
很容易理解:
const buffer 这种无类型参数传递时是将buffer这个变量的地址传入过程/函数中的。所以你可以知道为什么要写成:
fs.write(s[1], length(s))了, 因为传递参数时将把s[1]所在内存的地址(即s的具体内容所占用内存的首地址)传入fs.write中
而写成fs.write(s, length(s))的话则将s这个变量(其实是个指向具体字符串内容的指针)的地址传入, 这样当然不会得到你想要的结果啦
 
接受答案了.
 
后退
顶部