如,我定义了一个char数组,
var s1,s2:array[1..40] of char;调用api函数获得值后,如何将其转换为字符串呢??
我写了一个测试小程序,其结果我哭笑不得,那位指点一二
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button3: TButton;
Edit3: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
var
s1,s2:array[1..40] of char;
stem,stem2:String;procedure TForm1.Button1Click(Sender: TObject);begin
GetWindowsDirectory(@s1,40);
GetSystemDirectory(@s2,40);
//调用API获取两个目录信息
edit1.text:=s1;
edit2.text:=s2;
end;procedure TForm1.Button2Click(Sender: TObject);
var // a:integer;
st:String;
begin stem:=string(s2);
stem2:=string(s1);
label3.Caption:=stem2+stem;
{ a:=length(stem);
for a:=1 to a do
begin
st:=st+stem[a];
end;}
label1.Caption:=stem;
label2.Caption:=label1.Caption+'\ftp.ini';end;
end. 能否详细告之char、pchar、和string之间的关系和转换函数吗
var s1,s2:array[1..40] of char;调用api函数获得值后,如何将其转换为字符串呢??
我写了一个测试小程序,其结果我哭笑不得,那位指点一二
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button3: TButton;
Edit3: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
var
s1,s2:array[1..40] of char;
stem,stem2:String;procedure TForm1.Button1Click(Sender: TObject);begin
GetWindowsDirectory(@s1,40);
GetSystemDirectory(@s2,40);
//调用API获取两个目录信息
edit1.text:=s1;
edit2.text:=s2;
end;procedure TForm1.Button2Click(Sender: TObject);
var // a:integer;
st:String;
begin stem:=string(s2);
stem2:=string(s1);
label3.Caption:=stem2+stem;
{ a:=length(stem);
for a:=1 to a do
begin
st:=st+stem[a];
end;}
label1.Caption:=stem;
label2.Caption:=label1.Caption+'\ftp.ini';end;
end. 能否详细告之char、pchar、和string之间的关系和转换函数吗
解决方案 »
- 用datasanp做考试系统的几个疑惑,求解答!
- 各位大哥,我想学C++底层的东西,,哪本书比较好,能够透着讲解
- Indy的idHttp组件多线程POST问题,请教
- 女朋友是这样的人我改怎么办?
- 一个数据集附加的怪问题!!!
- 如果想产生一个表内唯一的Primary Key,用String类型!有什么好办法?
- 奇怪问题(listbox)?无人解决吗??给你200分!
- 关于Assigned,AssignField,AssignFile,AssignValues的功能和用法!
- 初学者的苦恼
- DbGrid不能显示小数点后有5位以上的数字,怎吗办?
- 请高手帮忙-----关于对SQL表中记录条数的计算
- 简单的数据库问题,只要给出可行性方案就给分!!!
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
sa: array [1..20] of char;
begin
for i := low(sa) to High(sa) do
sa[i] := 'A';
Edit1.Text := Copy(sa, Low(sa), High(sa) - Low(sa) + 1)
end;String 和 PChar 之间用:PChar(String) 来转化。
也即我把他转变成stem的字符串后,仍然不能支持字符串运算
急 急 急 在线等待
其实直接赋给他也可以,如edit1.text:=sa;
我做了一个测试,将你的改写为:procedure TForm1.Button3Click(Sender: TObject);
var
begin
Edit3.Text := Copy(s2, Low(s2), High(s2) - Low(s2) + 1) +'\ftp.ini';
end;因为s2的值前面已经得到,可是现在点击按钮后,字符串仍然不能直接运算,还是没有加上后面我添加的字符串值
implementationvar
s1,s2: PChar;
stem,stem2:String;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
GetMem(s1, MAX_PATH);
GetMem(s2, MAX_PATH);
GetWindowsDirectory(s1,MAX_PATH);
GetSystemDirectory(s2,MAX_PATH);
//调用API获取两个目录信息
edit1.text:=s1;
edit2.text:=s2;
end;procedure TForm1.Button2Click(Sender: TObject);
var // a:integer;
st:String;
begin stem:= s2;
stem2:= s1;
label3.Caption:=stem2+stem;
{ a:=length(stem);
for a:=1 to a do
begin
st:=st+stem[a];
end;}
label1.Caption:=stem;
label2.Caption:=label1.Caption+'\ftp.ini';
FreeMem(s1);
FreeMem(s2);end;
Delphi Language Guide -> Data types, variables, and constants -> String types -> NUll-terminated strings -> Using pointers, arrays, and string constants
中有你所要的信息
stem:=string(s2);
stem2:=string(s1);
两行改为
stem:=PChar(@s2);
stem2:=PChar(@s1);
即可.
Delphi会自动转换PChar和string类型,但是对char数组会出错的.