求助:结构体转成字符串出现的问题

miles_wei 2010-04-09 10:14:59
问题是这样子的
比如
type
data_mess=record
pw:string[4];
end;
var
pppp:data_mess;
aaaa:string;
begin
pppp.pw:=#1+#1+#1+#4;
SetLength(aaaa,SizeOf(pppp));
Move(testpack,aaaa[1],SizeOf(pppp));
...
end

我在单步调试时查看这个 SizeOf(pppp) 这个值 为什么是5呢???

还有个问题

我把两个字符串合并后转成字节数组时
比如
s1,s2:string[4];
s:string;
qqqq:array[0..7] of byte;
....
s:=s1+s2;
Move(s[1],qqqq[0],SizeOf(s));

我查看了下qqqq的值 只有前四个是正确的也就是S1对应的字节 后边的出现了混乱
我觉得这样子合并字符串后会不会出现了错误了~

这两个问题 应该怎么解决呢?~

请教下高手~
...全文
105 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
miles_wei 2010-04-09
  • 打赏
  • 举报
回复
谢谢 2位高手这么快的回答~
我知道为什么会出现这情况了~
结贴了~
非常感谢
miles_wei 2010-04-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bdmh 的回复:]
string[4];这类短字符声明,内存中会多出一个位来保存他的实际长度,所以SizeOf会是5,而length正是取的多出的这个位置的值,是4
[/Quote]
pppp是一个结构体
我试了下length不能用的
SizeOf(pppp)
bdmh 2010-04-09
  • 打赏
  • 举报
回复
string[4];这类短字符声明,内存中会多出一个位来保存他的实际长度,所以SizeOf会是5,而length正是取的多出的这个位置的值,是4
miles_wei 2010-04-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
string是一个指针,不能用SizeOf来获取内存的大小
[/Quote]

刚看了下sizeof和length的区别~换成length立马就好了
谢谢sqldebug_fan ~
第一个问题为什么会出现这种情况呢
我查看了 转成的字符串aaaa的值是#4#1#1#1#4
如果我让pppp.pw:=#1+#1+#4;
aaaa的值就变成#3#1#1#4了
SQLDebug_Fan 2010-04-09
  • 打赏
  • 举报
回复
string是一个指针,不能用SizeOf来获取内存的大小
SQLDebug_Fan 2010-04-09
  • 打赏
  • 举报
回复
sizeOf(s)这个有问题,你的这个只是获取了s这个指针的长度,你要用Length

16,748

社区成员

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

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