PChar 指向一个字符串,用PChar 在很多场合可以当作String用的,而char是一个字符,PChar^ 可以引用PChar 所指的第一个字符。

解决方案 »

  1.   

    PChar 定义为 指向 Char数组的指针。
    PChar= ^ Array[0..0] of char;
      

  2.   

    Getmem(s,<length>)
    GetWindowText(Handle,s,100);
    ShowMessage(s);
    freemem(s);Try it!!  It is right!!
      

  3.   

    to apple1978:你这段程序如果改成这样,还会出现内存错误,为什么?
    Getmem(s,<length>)
    s:=PChar('Hello');  <<< add
    GetWindowText(Handle,s,100);
    ShowMessage(s);
    freemem(s);
      

  4.   

       这是delphi对字符串操作的一个封装,
     
       在delphi里:pchar('Hello'),相当于一个常量,具有不可更改性;
       s:= pchar('Hello');
       d:=pchar('');   showmessage(IntTostr(Integer(s)));
       showmessage(IntTostr(Integer(d)));   两个值(即地址)是一样的。var s:PChar;
    begin
      s:=PChar('Hello');
      GetWindowText(Handle,s,100);  //你给一个相当于常量赋值,实效,s的地址不变。
      ShowMessage(s);
    end;
    显示的s却是'Hello',Why?var s:PChar;
    begin
      GetWindowText(Handle,s,100);//因为s没有初石化,此时delphi自动分配了内存空间,有效
      ShowMessage(s);
    end;
      

  5.   

    上面错了
    上面错了
    上面错了
    这是delphi对字符串操作的一个封装,  在delphi里:pchar('Hello'),相当于一个常量,具有不可更改性;
      s:= pchar('Hello');
      d:= pchar('Hello');
               ~~~~~~~~
      showmessage(IntTostr(Integer(s)));
      showmessage(IntTostr(Integer(d)));  两个值(即地址)是一样的。var s:PChar;
    begin
      s:=PChar('Hello');
      GetWindowText(Handle,s,100);  //你给一个相当于常量赋值,实效,s的地址不变。
      ShowMessage(s);
    end;
    显示的s却是'Hello',Why?var s:PChar;
    begin
      GetWindowText(Handle,s,100);//因为s没有初石化,此时delphi自动分配了内存空间,有效
      ShowMessage(s);
    end;  
      

  6.   

    pchar默认是不分配内存的,所以你的第一种用法是错误的,能够返回正确的结果是因为该指针指向一个不被使用的堆空间,但是不能保证所有情况下的正确
      

  7.   

    to airhorse(编程至尊宝) :
    var s:PChar;
    begin
      s:=PChar('Hello');
      s:=PChar('aaaaa');
      ShowMessage(s); -->显示为aaaaa,按你的说法,s应该是Hello呀?请再指教!
      

  8.   

    'hello'
    'aaaaa'是系统编译是生成的固定不变的。  s:=PChar('Hello');  s:=PChar('aaaaa');只是 s从'Hello'的地址指到了‘aaaaa’