当Pchar类型的变量存储的是长字符串时,怎么把该变量赋值给string类型的变量而不会丢失数据。例如:变量tmpstr:pchar存储的是一个很长的字符串,但把他shoumessage出来显示的是bm?,如何把tmpstr的值完整取出来赋值给一个string类型的变量。如能解答,小弟不胜感激!

解决方案 »

  1.   

    string 好象是有长度限制的255。你可以用TStringList,StringList[]是string
      

  2.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      s : string;
      tmpstr:pchar;
    begin
      GetMem(tmpstr, 120000);
      StrPCopy(tmpStr, PChar(Edit1.Text));  s := StrPas(tmpstr);                     //////////////
      ShowMessage(s);
      FreeMem(tmpstr);end;
      

  3.   

    Delphi string default length is 2GB
      

  4.   

    var s: string;
        p: pchar;
    begin
     
    ...
      s := strpas(p);//or
      s := pchar(p);
      

  5.   

    Delphi string default length is 2GB
      

  6.   

    谢谢高手指点,我的pchar变量保存的是二进制流数据,是从数据库取出来的图片的二进制流数据,我用strpas和pchar函数试了,数据是多了,但还是不完整。我把这个pchar数据直接保存在流里,保存的数据却还原不成图片。我是这样做的:
    strTmp:pchar;
    BlobStream:TmemoryStream;if not assigned(BlobStream) then
        BlobStream := TMemoryStream.Create;
    BlobStream.SetSize(374);
    BlobStream.Position:=0;
    BlobStream.Write(strTmp,374);//图片的长度是374,为调试程序在此写死
    BlobStream.SaveToFile('E:\tmp\fist.bmp');
      

  7.   

    shortString 是 255 的长度限制。
      

  8.   

    二进制流怎么能用pchar或string来处理呢,应该用byte[]吧,要不然遇到#0不就结束了?