到底该申请多大的内存空间??

csdn小虫 2009-10-25 09:39:27
procedure TForm1.Button1Click(Sender: TObject); //把一个字符数组的内容拷贝到pchar变量中
var
p:pchar;
i:integer;
arrChar:array[0..19] of char;
begin
for i:=0 to 19 do
arrChar[i]:='a';
getmem(p,20);
CopyMemory(p, @arrChar[0], 20);
showmessage(strpas(p));
freemem(p);
end;
当上面的字符数组的长度是20的时候,拷贝后显示的p的内容有错误呀,最后会多个字符

但是我把字符数组的长度变成10后,也就是arrChar:array[0..9] of char;
申请的p的空间也相应减少,改后的程序如下:(显示的结果是正确的)。那到底要申请多少的空间呀?
procedure TForm1.Button1Click(Sender: TObject); //把一个字符数组的内容拷贝到pchar变量中
var
p:pchar;
i:integer;
arrChar:array[0..9] of char;
begin
for i:=0 to 9 do
arrChar[i]:='a';
getmem(p,10);
CopyMemory(p, @arrChar[0], 10);
showmessage(strpas(p));
freemem(p);
end;

另外一个问题,如果我用StrAlloc申请内存空间,又该申请多大呢?
...全文
153 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
liangpei2008 2009-10-25
  • 打赏
  • 举报
回复
少结束字符char(0)
wxieyang 2009-10-25
  • 打赏
  • 举报
回复
你要为PChar类型的变量留一个字符,用来保存#0作为PChar的结束字符。
也就是说,你字符数组长度是20,那么你要为p分配21个字节,其中p[21] := #0

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧