我写了一个函数来读写IC卡,数据读取完全正确,返回来的数据大概有一万个字符左右.我定义了一个STRING型变量.但是当我调试时发现,这个变量中数据出现了怪事情,中间一段数据被一段#0代替了.当我把返回值分别保存到两个STRING型变量时,没有问题,但当两个变量合并后,又发现了上面的问题.查询帮助发现string型变量可以保存~2^31 个字符,请问各位老大,这是什么原因?

解决方案 »

  1.   

    采用ansistring定义试试!
    按理说ansistring是string的默认类型,不应该有这种问题的!除非你改过complier先项!
      

  2.   

    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;最后发现:ee中的值包含了一串#0#0#0
      

  3.   

    刚才测试了一下,发现多4096后的字符被替换成了#0,可能是delphi处理机制上的一些问题。我觉得对这样大型的数据的存取最好能使用文件暂存起来,毕竟没有那么多物理内存可以命中占用的吧。从程序设计角度来说也应该写入文件才合理。上面的代码,申明一个memo,用memo.text来代替ee,则可以得到正确结果。
      

  4.   

    改成
      ee := Copy(ee, 1, Length(ee)) + Copy(dd, 1, Length(dd));
    看看结果是不是正确的
      

  5.   

    或者ee := Concat(ee, dd);
      

  6.   

    //1.你的代码执行后做一次ShowMessage(Length(ee)),看看结果是多少?
    //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试试
      

  7.   

    上接 hevin() 
      
    最后加一个 Memo1.Text := ee ;
    则可以完全显示,没有#0#0#0这样的错误。支持用文件读取,要不文件干什么用。估计用bug,等高人来解答,继续关注中
      

  8.   

    声明文件的方法我试过,没有问题.用concat函数也有问题.这是为什么呢?难道delphi不能保存4096字节以上的字符串吗,还是DELPHI的bug.这和HELP中所说的sting型变量能保存4~2G字节的说明不符.
      

  9.   

    我刚才试了试,没有你说的这个问题。你的两个字符串都是可显示的ascii字符一个长度246,另一个101,第二个循环60六十次,总数盖世6306。我把结果显示出来没有任何错误,长度就是6306。也没有你说的什么#0。我用edit框显示的
      

  10.   

    我又在控制台显示,也没有你说的问题。你说的#0到底是什么?难道是字符串中的两个字符,还是ascii码0