根据你的程序,我看不出使用PChar(字符串指针)的必要,把定义为PChar的几个变量定义为String就不会出错了。

解决方案 »

  1.   

    因为你的pchar变量没有初始化,比如:
    getmem(Str_Name,20);
    如果不初始化就惠非法访问.
      

  2.   

    但是程序在运行到str_FirstName完都没问题,可以watch监视一下
    但到了
    while str_Name[icount]<>#0 do
      begin
        str_LastName[jcount]:=str_Name[icount];时,icount会变成一个很大的数,自然产生了非法操作,好像与字符串类型没有什么关系
    我就是搞不清楚icount怎么会突然变成一个很大的数???
        
      

  3.   

    定义成string后,再初始化‘               ’;
      

  4.   

    为什么string 不用?
    var
      str_Name,str_LastName,str_FirstName: string;
      icount:integer;
      jcount:integer;
      text:string;
    begin
    //////一个字符串。第一个空格前为FirstName,后为LastName.
      Str_Name:= 'Solid Yang';
      //str_FirstName := '';
      //str_FirstName := '';  icount:= 1;
      jcount:= 1;
      while (str_Name[icount]<>' ') and (str_name[icount]<> #0) do
      begin
        str_FirstName := str_FirstName + str_Name[icount];
        inc(icount);
      end;
      str_FirstName[icount]:=#0;
      inc(icount);
      while str_Name[icount]<>#0 do
      begin
        str_LastName := str_LastName + str_Name[icount];
        icount:=icount+1;
        jcount:=jcount+1;
      end;
      str_Lastname[jcount]:= #0;
      text:=format('FirstName= %s,LastName= %s ',[str_FirstName, str_LastName]);
      showmessage(text);
    end;
      

  5.   

    pchar需要自己分配内存!你没有分配内存,当然出现错误了。
      

  6.   

    该给 laza(麻风瘦) 加分了.
      

  7.   

    我没有仔细看你的程序,但是我觉得,你的程序的意思是:
    现在字符串中找到空格,然后见字符串分为2部分.
    我觉得没有必要想你那么写,这样写就可以了
    var
      str_Name,str_LastName,str_FirstName: string;
      iSpacePos:integer;
      text:string;
    begin
    //////一个字符串。第一个空格前为FirstName,后为LastName.
      Str_Name:= 'Solid Yang';
      iSpacePos:=Pos(Str_Name,' ');
      if iSpace>0 then//找到
      begin
        str_FirstName :=Copy(str_Name,0,Pos);
        str_LastName := Copy(str_Name,Pos,Length(str_Name)-Pos);
      end;
      text:='FirstName='+str_FirstName+' LastName='+str_LastName;
      showmessage(text);
    end;
    应该尽量使用VCL提供的函数啊
      

  8.   

    var
      pS: PChar;
    begin
      GetMem(pS, MAX_PATH);
      //
      FreeMem(pS, MAX_PATH);
    end;