function GetHostCallerId():PChar;
var
   pBuf:PChar;
   Ms:PChar;
   BS: string;
begin
   GetMem(pBuf,100); //要用这个函数。
   
   //我想把'abc'赋值给pBuf,怎么做?即pBuf指向的地址里的内容是'abc'
    pBuf:='abc'; //我知道这样是错的。其得到了'abc'的地址。
   FreeMem(pBuf);   result:=Ms;
end;

解决方案 »

  1.   

    function GetHostCallerId():PChar;->
    function GetHostCallerId():string;-> or
    function GetHostCallerId(pBuf:PChar;nLen:Integer):Boolean;
      

  2.   


    pBuf:='abc';
    这样写是可以的,delphi会自动帮你转换类型。
    如果你不放心可以这样写
    pBuf:=PChar('abc');我不知道你的Ms指向什么地方,但是我希望你不要用这种方法来返回值,很危险。
      

  3.   

    >>    pBuf:='abc'; //我知道这样是错的。其得到了'abc'的地址
    ...GetMem(result, 100);
    strcopy(....
    end;但如果沒有特別要求, 還是直接返回  string 為好
      

  4.   

    除了StrCopy等函数还可以用:
    Move(PChar('abc'),pBuf,Length('abc')+1);
    注意分配的内存要足够!
      

  5.   

    除了StrCopy等函数还可以用:
    s := 'abc';
    Move(s[1],pBuf^,Length(s)+1);
    注意分配的内存要足够!
      

  6.   

    pBuf:='abc';
    这样写是可以的,delphi会自动帮你转换类型。
    如果你不放心可以这样写
    pBuf:=PChar('abc');以上的两种方法,在FreeMem(pBuf);时就会出错的!因为释放的不是GetMem(pBuf,100); 所分配的内存。StrCopy函数还可以用:
    Move(PChar('abc'),pBuf,Length('abc')+1);
    这两个搞定了,谢谢!