{
Function MyTran(pstr:PCHAR):PCHAR
being
  ...
end;}
{main}
str:string;
...
str:=MyTran((PCHAR(str));
...其中在MyTran函数中跟踪返回值正常,返回后常常会在str后面多加一个字符,有誰碰到类似问题没有?

解决方案 »

  1.   

    或者在pchar的字符串最后加一个\0作为字符串结束符。
      

  2.   

    主要是因为PChar类型是以#0结束的原因!
    使用PChar(str)是强制以pchar方式访问,但是并不能保证str字符串后面的一个
    内存位置是#0,所以要看你MyTran函数怎么写的
    声明也应该改一下,改为:
    funtion MyTran(pstr: PChar; Length: integer): PChar;
    begin
      //分配空间的时候,要分配多1个字节用了放#0
      //例如GetMem(P, Length + 1);
      //然后,把字符然后做处理,最后把多的字符串赋值为#0就没问题了
    end;
      

  3.   

    应该是MyTran函数里面的问题,你把代码贴出来看看
    Function MyTran(pstr:PCHAR):PCHAR
    being
      ...
    end;
      

  4.   

    应该是函数里面的问题,把代码贴出来看看
    Function MyTran(pstr:PCHAR):PCHAR
    being
      ...
    end;
      

  5.   

    Function MyTran(pstr:PCHAR):PCHAR
    var
      str:string;
    being
      str:=pstr;
      ......
      //处理str
      ......
      result:=PCHAR(str);
    end;
    ----------------------------------------------------------------
    大概就是这样,怎么会发生这种情况呢
      

  6.   

    修改为如下:
    Function MyTran(pstr:PCHAR):PCHAR
    var
      str:string;
      ps: PChar;
    being
      str:=pstr;
      ......
      //处理str
      ......
      GetMem(ps, Length(str) + 1);
      ps[Length(str)] := #0;
      result:=ps;
    end;
      

  7.   

    Function MyTran(pstr:PCHAR):PCHAR
    var
      str:string;
      ps: PChar;
    being
      str:=pstr;
      ......
      //处理str
      ......
      GetMem(ps, Length(str) + 1);
      ps:=PCHAR(str);
      ps[Length(str)] := #0;
      result:=ps;
    end;
    ----------------------------------------------------------------
    各位有没有调试过,反正我就是出现那种情况,常常会加一个字符,真是见鬼
      

  8.   

    看来非要加上length参数不可了
      

  9.   

    Function MyTran(pstr:PCHAR):PCHAR
    being
      ...
    end;
    {main}
    str:string;
    ...
    str:=strpas(MyTran((PCHAR(str)));=========================================================================
    这么简单你问题CSDN没人搞得定,寒!!
      

  10.   

    就是这么简单,用strpas转换一下类型的问题,哎!!
    不说了,结贴!!!!!!!!!!!!!!!!!!!!!!!