如,我定义了一个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之间的关系和转换函数吗

解决方案 »

  1.   

    用 Copy 函数。
    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) 来转化。
      

  2.   

    不行啊,label3的值只显示stem2,而不是两个字符串的加集,
    也即我把他转变成stem的字符串后,仍然不能支持字符串运算
    急 急 急  在线等待
      

  3.   

    复制中心,看一下,
      其实直接赋给他也可以,如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的值前面已经得到,可是现在点击按钮后,字符串仍然不能直接运算,还是没有加上后面我添加的字符串值
      

  4.   

    这样吧:
    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;
      

  5.   

    随机帮助
    Delphi Language Guide -> Data types, variables, and constants -> String types -> NUll-terminated strings -> Using pointers, arrays, and string constants
    中有你所要的信息
      

  6.   

    关于你的代码,把
    stem:=string(s2);
    stem2:=string(s1);
    两行改为
    stem:=PChar(@s2);
    stem2:=PChar(@s1);
    即可.
    Delphi会自动转换PChar和string类型,但是对char数组会出错的.
      

  7.   

    对阿,现在就是看如何能转换char数组阿,怎么把我的原代码里的数据变得好用一些呢