请帮帮我吧,大哥,这回太奇怪了!(100分)

  • 主题发起人 主题发起人 wzs4743
  • 开始时间 开始时间
W

wzs4743

Unregistered / Unconfirmed
GUEST, unregistred user!
这段码哪里有问题?[:(]
var f:tfilestream
str,str1:string;
begin
f:=tfilestream.create('d:/bin/native.bin',fmcreate);
str:='dsfjkdskf dfkdsklf';
f.writebuffer(str,20);
f.position:=0;
f.readbuffer(str1,20);
showmessage(str1);//能正常出现信息对话框,但点击OK后出现ACCESS VIOLATION AT ADDRESS
。。。。
但改为 f.readbuffer(str,20);showmessage(str);一切正常;
更奇怪的在后面
假设已经已经通过上面的代码保存了这个BIN文件
有下面的代码
f:=tfilestream.create('d:/bin/native.bin',fmopenread);
f.readbuffer(str1,20);
showmessage(str1);
出现信息框上是乱码,但点击OK后出现ACCESS VIOLATION AT ADDRESS
。。。。
如果不要showmessage(str1);用label1.caption:=str1;
则只出现ACCESS VIOLATION AT ADDRESS
。。。。

救我,救我。
我要将一个数据表的字段写入这样的一个文件,又不能是文本文件那
how can i do?
 
改为
str, str1: array [0..19] of char;

试试
 
看看开发人员指南。
是因为内存读写方面的问题。
 
var f:tfilestream;
str, str1: array [0..20] of char;
begin
f:=tfilestream.create('d:/native.bin',fmcreate);
str:='dsfjkdskf dfkdsklf';
f.writebuffer(str,20);
f.position:=0;
f.readbuffer(str1,20);
showmessage(str1);//
f.free;
end;

最好别用string做分配的缓冲区。它是有编译器控制回收的。
 
procedure TForm1.Button1Click(Sender: TObject);
var f:tfilestream
str:string;
begin
f:=tfilestream.create('f:/1.bin',fmcreate);
str:='jj';
f.writebuffer(str,20);
f.position:=0;
f.readbuffer(str,20);
showmessage(str);
end;
 
str你确定有20个字符吗?
f.writebuffer(pchar(str)^,Length(str));

SetLength(str,20);
f.readbuffer(pchar(str)^,20);
 
应该是str1没有初始化就使用的缘故吧。
在使用str1以前,首先初始化str1,当然你可以通过上述方法通过数组进行初始化。
就没问题了。也可以使用以前初始化str1为nil.var f:tfilestream
str,str1:string;
begin
f:=tfilestream.create('d:/bin/native.bin',fmcreate);
str:='dsfjkdskf dfkdsklf';
f.writebuffer(str,20);
f.position:=0;
str1=nil

f.readbuffer(str1,20);
end.
pascal语言要求是很严格的。任何数据类型,使用以前,必须首先初始化。
 
感谢PIPI 及各位!pipi大侠
给小弟留个EMAIL好吗?
小弟的EMIl是wzs4743@SINA.COM
 
大皮真是不给面子 :-)
 
小贝啊,又逃课逛网啦
 
wzs4743:
向Pipi.要手机号。
 
pipi.穷,没有手机
 
接受答案了.
 
后退
顶部