怎样把动态array of char转换为string?(50分)

  • 主题发起人 主题发起人 winddeity
  • 开始时间 开始时间
W

winddeity

Unregistered / Unconfirmed
GUEST, unregistred user!
不一直说delphi的string很强吗?但好像就没有在动态 array of char 和 string 之间的直接转换?
查了以前的帖子,好像有
var
achr: array of char;
str: string;
begin
str := Copy(PChar(@achr[0]),1,Length(achr));
end;
这样的用法,但不知怎么我用着编译能通过,但会在运行时出错。

好像又有直接用string(achr)的用法,我也没用成功:(
而且这两个函数我都没在delphi帮助里面查到用法,哪位富翁能够给我详细说说呢?谢谢。
 
只需要一句话:
SetString(str, PChar(achr), Length(achr));
不是 string 不强,是您不会用。鉴定完毕,谢谢...
 
呵呵,传说中的事情,大多靠不住。比如一直有人说 Delphi 好用,但直到今天骂它不好用的人与传说中说它好用的人一样多。

上例中,你用自己的意志断定 achr[0] 已经存在,Delphi 也没办法了。
 
另外 achr 初始化的时候记得给他分配内存——SetLength...
 
数组还没有执行初始化,长度为0,怎么可有achr[0],明显越界了,操作achr[0]当然出错了。
Copy前执行一次SetLangth操作使achr长度大于0就没问题了。
当然用SetString是最保险的,就算achr长度为0也不会出错。
 
我这段程序只是写个模型,只有关键语句,其他内容都省略了,原型中的achr其实是从文件中读出来的二进制序列,初始化了的。
现在发现Copy(PChar(@achr[0]),1,Length(achr))能用没问题,是我读文件出错了。

to vvyang:
谢谢,你给了我另一种方法。只是语句貌似应该这样写:
SetString(str, PChar(@achr[0]), Length(achr))


结贴了。
 
To winddeity:
我那么写没错,动态数组变量本身就是一个指针,它的内容就是序列的首地址,加上 PChar 就是将动态数组变量(实际是指针)显式转化为指针类型。
您那么写的缺陷就是,如果 achr = nil 怎么办?
 
后退
顶部