#0和‘’的区别 ( 积分: 50 )

  • 主题发起人 nieyunfeng
  • 开始时间
N

nieyunfeng

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大虾:
有一个很基础的问题不是很清楚,就是#0和‘’都可以用来置空一个字符串,那他们有什么区别吗?我知道他们不是等同的,但是总弄不清他们之间的细小的区别,有哪位大哥知道能不能指点一二,谢谢!
 
#0代表ASCII码为0的一个byte,长度为1
''代表没有东西,长度为0
一般PChar最好以#0结尾,这样转成string才不会读到不属于它的内存
 
pchar总是以 #0结尾的,string字符串delphi默认也会在字符串结尾自动维护一个#0字符,以保持与pchar的兼容。
 
#0在用一字节内存
''不用内存
 
哎!不要乱讲!
#0在Delphi中不时结束符号!
例如
var
a:string[10];
a:='0123'#0'56789'
是有意义的! length(a)=10

a:=string(pchar(a))
则a为 '0123'
length(a)=4
 
用pchar 处理时,#0表示串的结束符
用string 处理时,''表示空串
 
string不是以#0结束的哈,如果使用setlength(string,N),这时string后面经常会有个#0,但是不属于它的哈,所以别误会了。
 
自己比较一下即知
procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
begin
s:= 'abc'#0;
edit1.Text:= IntToStr(length(s));
end;

procedure TForm1.Button1Click(Sender: TObject);
var
s: pchar;
begin
s:= 'abc'#0;
edit1.Text:= IntToStr(length(s));

end;
 
越看楼上的答案,就越觉得自己越菜,#0就是一个内容等于0字节,是数字,跟字符串完全
不搭界, 而''是字符串,空串,字符串的结束符Null,恰巧用#0来表示,当你将#0(Null)
填入字串的任何位置,很多函数都认为字串到那个位置就结束了,例如文本输出时,遇到#0
就结束了,但是在贮存String的时候,还有在头部记住了长度,所以有些函数会返回这个
值,所以length还是返回了真实长度,用''置空字串会释放内存,但因为要向系统申请内
存,复制内存数值,速度慢些,用#0是欺骗一些函数,没有释放内存,速度较快,你还可
以,随时换个位置放#0。
 
字符串的内存占用是 串长加9个字节
其中在字符串头部的负偏移处用8字节保存了串引用和串长信息,串结尾加了#0
这些信息是delphi的字符串处理例程自动维护的。用length函数看不到这些长度,length函数仅仅返回原先保存的串长信息。
 

Similar threads

顶部