TMemoryStream.Memory是什么意思,有什么用途,怎么用能举个例吗(我正在学指针)(30)

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

Unregistered / Unconfirmed
GUEST, unregistred user!
varp:pointer;M: TMemoryStream;beginp:=m.Memory;end;如果我想看指针里的内容应该怎么看啊这样写行不行的通edit1.text:=P^
 
可以啊,只是可能回出现乱码:edit1.text:=string(pchar(P^));
 
就是提供了你分配的内存流的地址p:char;p:=m.Memory;
 
为什么什么内容都看不到varp:pointer;M: TMemoryStream;beginM := TMemoryStream.Create; M.LoadFromFile('./DATA/fish.txt'); M.Position :=2;p:=m.Memory;edit1.text:=string(pchar(P^)); end;是用什么语句分配地址的,还有怎么变换地址的.(我真够笨的,学这么久都弄不明白)
 
这样不行吧,根本不知道有多大啊。这样显示出来,内容是可以显示出来,但是会多出好多东西来,全乱码的。
 
string(P),这样,就行了pchar(P^),不是把P^指向的内容又当成指针了吗?string(pchar(P^));成了指针的指针了///////////是用什么语句分配地址的,还有怎么变换地址的.(我真够笨的,学这么久都弄不明白)//你表述的就不明白啊?edit1.text的内容,赋值后,就指向了,m.memory,没有分配空间,分配的空间,是tmemorystream分配的
 
PInformationDataRec = ^TInformationDataRec;TInformationDataRec = packed record Brith_Date: TDateTime; Sex,Name,Adress,Phonenumber: string; end;有一个TXT文本文件,里面记录了人事资料(生日,性别,姓名,地址,电话号码)想把TXT文件里的数据装入PInformationDataRec纪录里面应该怎样写语句
 
这样的用 filestream最好,不知道你为什么用 memorystream?? type PInformationDataRec = ^TInformationDataRec;TInformationDataRec = packed record Brith_Date: TDateTime; Sex,Name,Adress,Phonenumber: array[0..200]of char; end;//var pinfo: PInformationDataRec ;procedure TForm1.btn1Click(Sender: TObject); //saveToFilevar pinfo: PInformationDataRec ;fs:TFileStream;begin // getmem(pinfo,SizeOf(TInformationDataRec)); pinfo.Brith_Date :=Now; StrCopy(pinfo.Sex ,'m'); //pinfo.Sex :='m'; StrCopy(pinfo.Name ,'张三'); //pinfo.Name :='张三'; StrCopy(pinfo.Phonenumber ,'11111111'); StrCopy(pinfo.Adress ,'上海'); fs:=TFileStream.Create('c:/1.txt',fmOpenWrite ) ; //没有考虑原来有记录,请你自己处理 fs.WriteBuffer(pinfo,SizeOf(TInformationDataRec)) ; fs.Free ;end;procedure TForm1.btn2Click(Sender: TObject); //readFromFilevar pinfo: PInformationDataRec ;fs:TFileStream;begin getmem(pinfo,SizeOf(TInformationDataRec)); fs:=TFileStream.Create('c:/1.txt',fmOpenRead ) ; //只读了一条记录,其他请你自己处理 fs.Seek(0,soFromBeginning); fs.read(pinfo,SizeOf(TInformationDataRec)) ; ShowMessage(pinfo.Name ); ShowMessage(pinfo.Adress ); fs.Free ;end;建议:最好不要在record里用string类型,字符串就用 char数组
 
m.Memory 指向了流的数据首地址
 
var str:string;... setlength(str,m.size); m.Position:=0; m.read(str[1],m.size); edit1.text:=str;不要用edit1.text:=string(pchar(P^));你的memorystream是临时变量,生存期一过内存就被清空了,连带着内容也就都没了
 

Similar threads

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