我写了一个函数来读写IC卡,数据读取完全正确,返回来的数据大概有一万个字符左右.我定义了一个STRING型变量.但是当我调试时发现,这个变量中数据出现了怪事情,中间一段数据被一段#0代替了.当我把返回值分别保存到两个STRING型变量时,没有问题,但当两个变量合并后,又发现了上面的问题.查询帮助发现string型变量可以保存~2^31 个字符,请问各位老大,这是什么原因?
调试欢乐多
按理说ansistring是string的默认类型,不应该有这种问题的!除非你改过complier先项!
ee,dd,ff:string;
list,i:Integer;
begin
{ TODO -oUser -cConsole Main : Insert code here }
ee:='310606000020131940409000@31060002000070189000@CCFFFFFF02001200000000000000009000@0568858601097020040725140920040725141000000200000201010000000001000000000000000074874847208402000008FFFFFFFFFFFF000041104771FFFFFFFFFFFF74874847208402000008FFFF9000@';
dd:='0407251409141000000200000000000001000008FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9000@';
for i:=1 to 60 do
begin
ee:=ee+dd;
end;最后发现:ee中的值包含了一串#0#0#0
ee := Copy(ee, 1, Length(ee)) + Copy(dd, 1, Length(dd));
看看结果是不是正确的
//2.使用
{$M+}
var
ee,dd,ff:string;
list,i:Integer;
begin
{ TODO -oUser -cConsole Main : Insert code here }
ee:='310606000020131940409000@31060002000070189000@CCFFFFFF02001200000000000000009000@0568858601097020040725140920040725141000000200000201010000000001000000000000000074874847208402000008FFFFFFFFFFFF000041104771FFFFFFFFFFFF74874847208402000008FFFF9000@';
dd:='0407251409141000000200000000000001000008FFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9000@';
for i:=1 to 60 do
begin
ee:=ee+dd;
end;{$M-}3.使用AnsiString试试
最后加一个 Memo1.Text := ee ;
则可以完全显示,没有#0#0#0这样的错误。支持用文件读取,要不文件干什么用。估计用bug,等高人来解答,继续关注中