通过下面的范例,理解Length() 和Sizeof() 的区别
1. 字符串长度
var
S:string
;begin
S:='abcdefghijklmnopqrstuvwxyz'
; WriteLn('Length = '
, Length(S)); WriteLn('SizeOf = '
, SizeOf(S)); WriteLn('TotalBytes = '
, Length(S) * SizeOf(S[1])); ReadLn;end
.
![2011071215205954.png](https://pic002.cnblogs.com/images/2011/194486/2011071215205954.png)
var
S:string
[26];begin
S:='abcdefghijklmnopqrstuvwxyz'
; WriteLn('Length = '
, Length(S)); WriteLn('SizeOf = '
, SizeOf(S)); WriteLn('TotalBytes = '
, Length(S) * SizeOf(S[1])); ReadLn;end
.
![2011071215214427.png](https://pic002.cnblogs.com/images/2011/194486/2011071215214427.png)
2. 字符串长度
procedure
TDemoForm.Button1Click(Sender: TObject);var
var
S:array
[0..16]of
Char;begin
StrPCopy(S,'This is a string'
); Memo1.Lines.Add('Length of P is '
+ IntToStr(Length(S))); Memo1.Lines.Add('Size of P is '
+ IntToStr(SizeOf(S)));end
;
This code will display the following in Memo1:
Lengthof
Pis
17 Sizeof
Pis
34
3. Calls to FillChar need to be reviewed when used in conjunction with strings or a character. Consider the following code:
var
Count: Integer;
Buffer:array
[0..255]of
Char;begin
// Existing code - incorrect when string = UnicodeString
Count := Length(Buffer);
FillChar(Buffer, Count, 0);
// Correct for Unicode – either one will be correct
Count := SizeOf(Buffer);// <<-- Specify buffer size in bytes
Count := Length(Buffer) * SizeOf(Char);// <<-- Specify buffer size in bytes
FillChar(Buffer, Count, 0);end
;
4. Calls to Move need to be reviewed when strings or character arrays are used. Consider the following code:
var
Count: Integer; Buf1, Buf2:array
[0..255]of
Char;begin
// Existing code - incorrect when string = UnicodeString
Count := Length(Buf1); Move(Buf1, Buf2, Count);// Correct for Unicode
Count := SizeOf(Buf1);// <<-- Specify buffer size in bytes
Count := Length(Buf1) * SizeOf(Char);// <<-- Specify buffer size in bytes
Move(Buf1, Buf2, Count);end
;