会员
周边
捐助
新闻
博问
闪存
赞助商
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
skysunmoon
Delphi 的字符及字符串[1] - string、AnsiString、WideString、String[n]、ShortString
//最常用的 string
var
str:
string
;
{定义}
begin
str :=
'万一'
;
{赋值}
ShowMessage(IntToStr(Length(str)));
{长度是: 4}
end
;
//长字符串 AnsiString; 在当前版本(2007)中的默认状态下, String 就是 AnsiString
var
str: AnsiString;
begin
str :=
'万一'
;
ShowMessage(IntToStr(Length(str)));
{长度是: 4}
end
;
//宽字符串 WideString (效率不及 AnsiString)
var
str: WideString;
begin
str :=
'万一'
;
ShowMessage(IntToStr(Length(str)));
{长度是: 2}
end
;
//定长字符串
var
str1: String[
6
];
{指定大小不能超过 255}
str2: String[
100
];
begin
{少给了也会占那些内存}
str1 :=
'万一'
;
ShowMessage(str1);
{万一}
ShowMessage(IntToStr(Length(str1)));
{4; 这是字符串的长度}
ShowMessage(IntToStr(SizeOf(str1)));
{7; 这是占内存大小}
{多给了会被截断}
str1 :=
'万一的 Delphi 博客'
;
ShowMessage(str1);
{万一的}
ShowMessage(IntToStr(Length(str1)));
{6; 这是实际保存的字符串长度}
ShowMessage(IntToStr(SizeOf(str1)));
{7; 这是占内存大小}
{问题: 不是声明大小为 6 吗? 怎么 SizeOf 是 7 ? }
{因为定长字符串会多出一个首字节来记忆字符串的实际长度}
{举例说明, 如果给 str2 按如下赋值, 那它的首字节(str2[0])肯定储存着字符 'A'}
str2 :=
'iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii'
;
{65个}
ShowMessage(str2[
0
]);
{A}
ShowMessage(IntToStr(Ord(str2[
0
])));
{65; 这是 'A' 在 ASCII 序列中的序号, 用的就是它}
{那以后可以用 Ord(str2[0]) 来代替 Length 判断字符串的长度吗? }
{对定长字符串是可以的; 不但能读取, 还可以像 SetLength 一样设置}
end
;
//ShortString; 它相当于 String[255]
var
str: ShortString;
begin
str :=
'万一的 Delphi 博客'
;
ShowMessage(str);
{万一的 Delphi 博客}
ShowMessage(IntToStr(SizeOf(str)));
{256; 这是大小}
ShowMessage(IntToStr(Length(str)));
{18 ; 这是实际长度}
ShowMessage(IntToStr(Ord(str[
0
])));
{18 ; 这是从首字节中取出的长度}
posted on
2009-04-07 12:25
skysunmoon
阅读(
361
) 评论(
0
)
编辑
收藏
举报
会员力量,点亮园子希望
刷新页面
返回顶部
导航
博客园
首页
订阅
管理
公告