访问string类型的,第一个字符用string[1]来取。

解决方案 »

  1.   

    我也是刚才想起来的。
    讲得不清楚string类型第0位是存放其大小的。
    我的实验如下
    Str := 'ABCDE';
    Char1^ := Str[0];
    Dec(Char1);
    Char1结果不是其大小
      

  2.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
      Str: string;
      Ch1: ^Char;
    begin
      Str := 'abcde';
      Ch1 := @Str[1];
      Dec(Ch1);
      if Ch1^ = #0 then
        ShowMessage('Haha, The value is #0 ');
    //  ShowMessage(string(Integer(Ch1^)));end;
      

  3.   

    procedure TForm1.Button2Click(Sender: TObject);
    var
      Str: ShortString;
      Ch1: ^Char;
    begin
      Str := 'abcde';
      Ch1 := @Str[1];
      Dec(Ch1);
      if Ch1^ = #5 then
        ShowMessage('Haha, The value is #5 ');
      ShowMessage(Ch1^);end;ShortString才是放的其大小
      

  4.   

    string[0]的确是存放大小的。delphi支持2中string,一个是长字符串,一个短字符串区别就在于string[0]的大小。标准的是string[0]是一个字节,他只能表示0~255,所以这个字符串长度不能超过255.长字符串的string[0]是一个4字节的integer,他支持4G的长度,但是由于各win32系统进程可访问有效空间的限制,只能用到2G - 4字节。你的
    Str := 'ABCDE';
    Char1^ := Str[0];
    Dec(Char1);所以,对于长字符串,肯定不对了,因改用整形指针。
      

  5.   

    谢谢。var
      Str: string;
      PNum: ^Integer;
    begin
      Str := '123456';
      PNum := @Str[1];
      Dec(PNum);
      ShowMessage(Format('%d', [PNum^]));end;
    呵呵,完全正确