procedure TForm1.Button1Click(Sender: TObject);
var
a,b:array[0..100] of char;
begin
b:='12345';
copymemory(a,b,4);
end;原因: String不能这样用,因为String是个指针,它指向一个字符。
var
a,b:array[0..100] of char;
begin
b:='12345';
copymemory(a,b,4);
end;原因: String不能这样用,因为String是个指针,它指向一个字符。
解决方案 »
- 在写项目规划书时,可以提出哪些关于数据库的性能指标要求?
- 如何使用webbrowser一个网页显示后再显示另一个?
- 关于dbGrid显示字段值的内容的问题
- 急呀,!TDBChart的简单问题,在线等待。解决立即发分。
- 怎样可以去掉运行时在连接数据库时弹出的对话框 database login
- CSDN上的精彩论谈(XML)如何保存于本地硬盘,有些什么好的工具吗?
- 控件安装的问题
- 没办法,我要提问了!!!!
- 程序员大营的水池太浅.
- delphi10可以在win8系统里安装么?
- 在SQL中如何用日期作为条件进行查询? 我的SQL错没错呀!
- 求救:如何做用 installshield 如何用,DELPHI自带的那个,主要是密码设置 ,急,马上给分,
var
a, b: string;
begin
b := '12345';
SetLength(a, 4); //需要分配资源
CopyMemory(@a[1], @b[1], 4); //@a <> @a[1]//string最前的字节不是保存第一个字符
ShowMessage(a);
end;
处理string的函数是很多的,而且string很安全。参考:Copy()、Pos()等函数
procedure TForm1.Button1Click(Sender: TObject);
var
a, b: string;
begin
b := '12345';
SetLength(a, 10); //需要分配资源
CopyMemory(@a[1], @b[1], 1); //@a <> @a[1]//string最前的字节不是保存第一个字符
ShowMessage(a);
end;它出的结果第一次是‘1’,但第二次是‘1utton1’,严重不解??
关注。
to laisxy(不懂即懂,懂即不懂):
不知道你有没有运行一下,你写的代码在我机器上的delphi6下出现这样的错误:
[Error] Unit1.pas[31]:Incopatible types:'array' and 'pointer'
copymemory的前两个参数要求是指针啊类型啊to zswang(伴水)(流浪在北京):
谢谢你,问题这样就可以解决了。
我知道用copy,我只是想知道这个错误在哪里。to moudy(勇士) :
我怎么没出现这种情况?
早期的string只能保存255长度的字串
原因是用第一个字节保存长度,而一个字节只能表示0..255到了Delphi1明显,长度为255的字串已经不实用了
在Delphi2 string类型有了扩充,可以保存相对无限制长度
具体的存储格式Borland并没有公开所以S[1]并不是string的首位置
procedure TForm1.Button1Click(Sender: TObject);
var
vBuffer: array[0..255] of Char;
vString: string;
begin
vString := '不赋值访问下标就危险';
if @vBuffer = @vBuffer[0] then
ShowMessage('@vBuffer = @vBuffer[0]');
if @vString = @vString[1] then
ShowMessage('@vString = @vString[1]');
end;
在你的这条语句中解释为:把b[1]及b[2,3,4]复制给a首地址
因为string的首地址是保留的格式,所以这样是非法的说来说去要明白还是不容易。找找感觉吧。
最好多做做实验,什么都比不上事实更能说明一切。to moudy: 空间分配了,但具体的值没有填满。计算机最怕就是出现不能确定的值。唉~~头痛。