STRING[20]同ARRAY [0..19] OF CHAR有无区别?区别是什么?(49分)

  • 主题发起人 主题发起人 chuwenyong
  • 开始时间 开始时间
C

chuwenyong

Unregistered / Unconfirmed
GUEST, unregistred user!
string[N],N不能超过255,而array[0..N]of char,N可以超过255,
 
仅此而以?谁还有不同理解和看法吗?
 
string[n] 好象是n个字符+‘/0’结束的
array[0..n] of char 没有哦,没一个数组都是一字符
 
同意楼上的!
 
就好象是
string: 1234545667fgg/0
array[0..n] of char 12345sdfggggggg
理解一下,结构不一样啊
正如无忌说的 string是有限的长度
而数组可定义个比string 更长的
 
在用法上没有什么区别, 但实际上是有区别的.
 
TO:zhousi,照你这么说:
如果下面结构:
TAA = record
sAAA :String[20];
sBBB :String[10];
sCCC :String[15];
end;

TAA = record
sAAA :array [0..19] of char;
sBBB :array [0..9] of char;
sCCC :array [0..14] of char;
end;
是一样还是不一样?
 
string[n] 是字符串包含有N位
array[0..n] of char 是字符数组,每个数组元素是一位字符
 
chuwenyong 是啊,用上去没什么区别
只是在内存分配上不同,用户感觉不到的,就是这样拉
 
没区别。。。
 
代码:
下面程序测试好象有区别?不知是不是方法不对?
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
   TAA = record
        sAAA :String[20];
        sBBB :String[10];
        sCCC :String[15];
    end;
    TBB = record
        sAAA :array [0..19] of char;
        sBBB :array [0..9] of char;
        sCCC :array [0..14] of char;
    end;
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
var
    sa:TAA;
    sb:^TBB;
begin
    sa.sAAA := '01234567890123456789';
    sa.sBBB := '0123456789';
    sa.sCCC := '012345678901234';
    sb := @sa;

    showmessage(sa.sAAA);{显示为:01234567890123456789}
    showmessage(sb.sAAA);{显示为:0123456789012345678}
end;

end.
 
sa.sAAA := '01234567890123456789';
sAAA :String[20];

你出届了啊
String[20]; 只能放19个,1-19
分别放着0123456789012345678 少个9
然后赋值
最后显示的是 0123456789012345678
懂了吗?
 
TO zhousi:
我没有出届。string[20]应该可以存放20个字符。

欢迎大家继续发表自己的看法啊。
 
string[20]当然能存放20个字符,它与array[0..19] of Char的区别:
1.前者最多不能超过256个字符
2.前者存放实际有效字符的位置是str[1]到str[20],而str[0]保存着这个字符串的实际长度
比如:
var
str: string[20];
begin
str := 'ab';
Caption := str + ' - ' + IntToStr(Ord(str[0])) + ' - ' + IntToStr(High(str));
end;
结果是在标题栏上显示‘ab - 2 - 20’,实际字符串长度为2,声明时分配的长度为20。
下面这个帖子解释得非常好。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=118411
 
多人接受答案了。
 
后退
顶部