主题:关于string 和 char
xqg119
[专家分:0] 发布于 2006-04-17 12:20:00
string 和 char 有何区别?
若有一个变量a是char的
a:=edit1.text[2]; 为何是错的?
而当a为string时,则是对的,能得到我想要的结果.
回复列表 (共4个回复)
沙发
wangsdong [专家分:21390] 发布于 2006-04-17 12:26:00
因为char这一个字符,edit1.text[2]里面不一定是一个字符,所以错了
string为字符串。
板凳
cilix [专家分:1030] 发布于 2006-04-17 12:31:00
那句是对的啊,哪里有错呢?提示什么错误?
3 楼
xqg119 [专家分:0] 发布于 2006-04-17 13:51:00
但是edit1.text[2]表示从左至右的第二个 字符,
当a 为string时
edit1.text:='abcde'f;
a:=edit1.text[2];
执行后,a 的值为'b'.它也为一个字符呀!
也就是说edit1.text[2]表示一个字符.
4 楼
progfan [专家分:2270] 发布于 2006-04-17 15:34:00
char和String类型是不同的,char表示一个ASCII码字符,而String类型是表示一个字符串。假设
var
x:char;
y:string;
begin
x:='A';
y:='A';
end;
虽然上述代码中x和y看上去都一样,但在内存中的存储方式是不一样的,x在内存中只占一个8位字符长度,而y却要占两个8位字符长度。
x: 01000001
y: 01000001
00000000
上面的y中第二行多出来的0叫空0,为Ascii码为0的特殊字符,不可见,用字符串测长度函数测试时,这个多余的空0是不算长度的。
如果要表示更多的字符则需要用char数组,它和string类型之间可用StrPCopy函数,在拷贝时,会将字符串中的空0一同拷贝。例如
procedure TForm1.Button1Click(Sender: TObject);
var
b:array[0..80] of char;
begin
strPcopy(b,edit1.Text);
edit2.Text:=b;
end;
从上例可以看出char数组和String是相通的,都可以用来表示字符串。
我来回复