有一段c的代码:
FILE *outfile;
char buf[200];
outfile = fopen("d:\123.123","wb")
sprintf(buf,"%daaaa\rbbbb",10);
fprintf(outfile,"%s",buf);
用delphi实现相同功能
s:string
F:TFileStream;
F:=TFIlestream.create('d:\123.123',fmOpenWrite);
s:=Format('%daaaa\rbbbb',10); // \r不起作用 换成#13#10也不行
F.write(s,Length(s));
delphi 实现有两个问题:
1:是format 时候控制符没回车换行'%daaaa#13#10bbbb' 换不了行,'%daaaa'+#13#10+'bbbb' 这种可以换行 但是好像%d参数传不对
2:写相同的字符到一个位二进制文件,两种方式生成的二进制不一样。牛人快帮帮忙看看 谢谢
FILE *outfile;
char buf[200];
outfile = fopen("d:\123.123","wb")
sprintf(buf,"%daaaa\rbbbb",10);
fprintf(outfile,"%s",buf);
用delphi实现相同功能
s:string
F:TFileStream;
F:=TFIlestream.create('d:\123.123',fmOpenWrite);
s:=Format('%daaaa\rbbbb',10); // \r不起作用 换成#13#10也不行
F.write(s,Length(s));
delphi 实现有两个问题:
1:是format 时候控制符没回车换行'%daaaa#13#10bbbb' 换不了行,'%daaaa'+#13#10+'bbbb' 这种可以换行 但是好像%d参数传不对
2:写相同的字符到一个位二进制文件,两种方式生成的二进制不一样。牛人快帮帮忙看看 谢谢
sprintf(buf,"%daaaa\rbbbb",10);
s:string ;
F:TFileStream;
begin
F:=TFIlestream.create('e:\123.123',fmOpenWrite or fmCreate );
s:=Format('%daaaa%sbbbb',[10,#13]);
F.write(pchar(s)^,Length(s));
end;
顺便抓住再问个问题:关于delphi指针做参数
procedure TForm3.Button1Click(Sender: TObject);
var
Pl:PLongint;
begin
Pl:=GetMemory(SizeOf(longint)*20);
pl^:=1;
add(pl);
ShowMessage(IntToStr(pl^));
FreeMem(Pl);
end;
procedure add(pla:PLongint);
var
i:Integer;
begin
i:=pla^;
Inc(pla);
pla^:=i+6;
end;
按我理解指针做参数应该是传递引用,所以showmessage应该是7,但是实际是1 怎么才能实现用指针做参数
传递引用,谢谢
procedure add(var pla:PLongint);
但要注意的是,由于Pl的地址已改变,所以 FreeMem(Pl); 要出错,正确的作法: procedure add(var pla:PLongint);
var
i:Integer;
begin
i:=pla^;
Inc(pla);
pla^:=i+6;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Pl,p:PLongint;
begin
Pl:=GetMemory(SizeOf(longint)*20);
p:=pl;
pl^:=1;
add(pl);
ShowMessage(IntToStr(pl^));
FreeMem(P);
end;
以前印象种指针类型是不用加var的 非指针变量想传引用才需要
^_^
今天终于弄明白了 结贴了
var
pl:PlongInt;
begin
PL:=GetMemory(SizeOf(longint)*20);
Pl^:=1;
inc(PL);
PL^:=2;
inc(PL);
Pl^:=3;
end;
如何使用指针直接访问 第 二个或者第三个元素
试过 PL^[2] PL[2] PL[2]^ 都不行