procedure (s:pchar;st:integer;s1:pchar);
var
  i:integer;
  temp:string;
  tc:char;
begin
  temp:=s1;
  for i:=0 to length(trim(temp))-1 do
  begin
    s[st+i]:=s1[i];
  end;
end;
我运行这段代码?最起码有一半以上会在temp:=s1;后S1变成了别一个值为什么会这样。
要怎么改呢。

解决方案 »

  1.   

    procedure (s:pchar;st:integer;s1:pchar);
    从S字符串的ST位置开始用S1里面的数据替换.
    例:s='123456789' s1='333' st:=4
    执行后S的值为'123333789'
      

  2.   

    在我的程序里因为怕S1后面有空字符,所以把它先给了temp;
      

  3.   

    再加一个参数,指示s1的长度处理会好很多。
    procedure test1(s:pchar;st:integer;s1:pchar;st1:integer);
    var
      i:integer;
    begin
      for i:=0 to st1-1 do
        s[st+i]:=s1[i];
    end;
      

  4.   

    temp:=s1;
    改为
    temp:=string(s1);
      

  5.   

    juror (绝望生鱼片) :我感觉函数并没有实在的意义,s随便改变了 但是有什么意义哪?声明部分好好看看 :procedure (s:pchar;st:integer;s1:pchar);改procedure (var s:pchar; st:integer;s1:pchar);这样你的程序可能会有点用处...
      

  6.   

    什么为这样。temp:=string(s1);也不行。
      

  7.   

    我把s1:=pchar(temp);重新再来一次就好了。
    DELPHI不会是这样的吧。