var str:String[4];
begin
     str:='3456';
     edit1.Text:=str[0];
end;
为什么在edit1中返回的是个空格,我知道str[0]中存放的内容是str的长度4,str[0]在内存中到底是
以什么形式存放的?????请大家指点一下

解决方案 »

  1.   


    procedure TForm1.Button1Click(Sender: TObject);
    var str:String[4];
    begin
      str:='3456';
      edit1.Text:=InttoStr(Byte(str[0]));
    end;执行后显示“4”
    而直接读取时编译器将str[0]当做字符处理,显示出来就像一个空格。
      

  2.   

    第一个不是空格,而是长度4,它作为ascii是不可显示字符,你这样看就应该明白了
    var str:String[4];
    begin
      str:='3456';
      edit1.Text:=inttostr(ord(str[0]));end;
    注意:String[4]作为短串,它的string[0]是可访问的,如果是长串,它的[0]就不可访问了
    尽量不要用string[0]
      

  3.   

    谢谢指点,不过我最想知道的还是它在内存中的存储形式,我才能能理解为什么它作为ascii是不可显示字符,
    请再指点下
      

  4.   

    如果是短串string[n]形式,它的存储形式是
    [长度]数据
    所以它的长度不能超过255个字符
      

  5.   

    再给你HELP中的说明:
    A ShortString is 0 to 255 characters long. While the length of a ShortString can change dynamically, its memory is a statically allocated 256 bytes; the first byte stores the length of the string, and the remaining 255 bytes are available for characters. If S is a ShortString variable, Ord(S[0]), like Length(S), returns the length of S; assigning a value to S[0], like calling SetLength, changes the length of S. ShortString uses 8-bit ANSI characters and is maintained for backward compatibility only.
      

  6.   

    1个字节的长度就是一个byte类型,它的值为0~255(十六进制0~$ff)
     str:='3456';
    内存中为
    $04 $33 $34 $35 $36
    第一个$04就是长度(HELP写得很清楚了),后面就是3456的ascii码