我用getsystempath函数,取回来的值是PCHAR类型的,可是不知道该怎么样才能将它转换为STRING类型来给我用,

解决方案 »

  1.   

    var s:string;
        pc :PChar;
    ....
     s := PChar(pc);
      

  2.   

    b := format('%s', [tmp]);也可以使用下面的函数。
    StrPas:将Pchar转换为string。
      

  3.   

    不好意思写错了,更正:
    var s:string;
        pc :PChar;
    ....
     s := string(pc);
      

  4.   

    应该使用strpas用string()是不行的
      

  5.   

    用string(pc)强制转换,string支持pchar类型,可以安全转换.
      

  6.   

    对,我错了,string(0的确可以强制转换
      

  7.   

    以前我回答过这个问题,首先我觉得用string()强制转换是很不安全的,我碰到过转换后是乱码的现象。
    建议:
    function StrPas(const Str: PChar): string;
    我想应该能够了解了吧。
    另外一个函数也许会用得着:
    function StrPCopy(Dest: PChar; const Source: string): PChar;
    我想也应该看懂了。
      

  8.   


    直接pchar()就可以了!系统会强制转换的!!
      

  9.   

    谢谢各位,强制类型转换确实很不安全,因为我就是使用强制类型转换出现了乱码才问的这个问题。
    刚才试了一下,好象还是用StrPas比较好
      

  10.   

    出现了乱码是因为string是单字节的,要支持双字节如汉字要用widestring
      

  11.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      p:PChar;
      s:String;
    begin
      GetSystemDirectory(p,12);
      s:=Strpas(p);
      caption := s;
    end;
    这样有错误吗??
    可是我这样还是查不到SYSTEM目录阿,得到的结果是"S嬝嬅??"
    能帮我看看吗