str( )的使用(50分)

  • 主题发起人 主题发起人 longwx
  • 开始时间 开始时间
L

longwx

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么str(1,Edit1.Text);语法错,而str(1,string1);则可以?Edit1.Text不也是string吗?
另外,在system.pas中怎么找不到procedure str( )源代码?
 
1.procedure Str(X [: Width [: Decimals ]]
var S);这里S要求是变量.
2.我也没找到.
 
Edit1.Text虽然也是String,但它是不能作为一个参数的。
 
在Str上 按Ctrl+鼠标就找的到了
 
str中的S为变参,需要返回值,故不能用EDIT1.text
 
Edit1.Text是一个属性,不能作为变参传递
 
Edit1的Text属性虽然是一个String,但是Edit1.Text却是一个指针。你可以
令I := SizeOf(Edit1.Text)
不论Edit1.Text为何值,I始终等于4(一个指针占
4个字节)。因此,str(1,Edit1.Text);是错的,同时可能是由于Delphi编译器的
原因,也不能用^去赋值。其它类的类似string属性也发现有相同的例子。
 
kokusan你真cool
 
edit1.text不应该称为指针, sizeof(edit1.text)取到的实际是个函数入口地址的大小.
不能用^赋值因为它并不是个指向存储文本的内存块的指针.
读取edit1.text时实际是在调用edit类中一个private函数gettext.
给edit1.text赋值时实际上是在调用edit类中一个private的过程 settext.
 
是我错了,不好意思。不过我发现任一个
s: string;
I := SizeOf(s);
的返回值均为4,所以我觉得与是否调用gettext,settext无关,而是由Delphi存储
方式决定的,它可能采用了类似COM的引用计数的方法,s的实际值在没有改变的情
况下在内存中只有一个备份,而对外显露的s其实是指向s的实际值的指针,因此I才
始终等于4。
 
procedure Str(X [: Width [: Decimals ]]
var S);

X is an integer-type or real-type expression.
Width and Decimals are integer-type expressions.
~~~S is a string-type variable (!变量)or
a zero-based character array variable(!数组变量)
if extended syntax is enabled.
 
接受答案了.
 
后退
顶部