string类型是可以自动回收内存的,而array不行。如果你定义一个变量为string[5]而不是string的话,其实是一个ShortString类型。尽量定义成string类型吧

解决方案 »

  1.   

    定义成string,而不是string[5],好象不能直接用copymemory!
    另外,各位大侠还没有回答我上面提的问题!谢谢!
      

  2.   

    str[0]是有意义的,=length(str)
    ary[0]没有意义
    str是short string
      

  3.   

    你的问题在《delphi 5.0 开发人员指南》里会找到答案的,去看看吧
      

  4.   

    copymemory(pch,@str[1],5);
    与copymemory(ary,@ary[1],5)其实是一样的
    因为string类型就是字符数组
    str在内存中是连续的,你可以去试一下的,从@str[1],到@str[5]你用指针移一下,就知道了
    str是Borland公司封装好的ary,说的本质str还是个ary
      

  5.   

    to efangdreamer:
        我没有问str[0],我知道内容下标是从1开始,而0是长度。
    to cobi:
        我看过这本书的,可是没有明确的答案呀。
    to qiandeng:
    不一样,我试了试,用copymemory(pch,@str[1],5);只能拷贝前面4个字符,最后一个是随机的有时是#1,有时又是#12而用copymemory(pch,@ary[1],5)就能完全拷贝5个。
      

  6.   

    你把getmem(pch,5);改为GetMem(pch,6)
    如果有问题,找我!我刚试过。你只给pch分配了5个空间,这就有问题了。
    pch后面必须要有一个0结束符。你不分配这一个空间,出现的问题就会很奇怪。
    所以你上面的随机的错误就很正常了。
      

  7.   

    str:string[5];
    ary:array[1..5] of char;
    这两个东西是一模一样的!
      

  8.   

    str:string[5];
    ary:array[0..4] of char;
    这两个东西是一模一吧?
      

  9.   

    str:string[5];
    ary:array[0..4] of char;
    这两个东西是一模一吧?  
    ---------------------------
    这两个东西不一样!!!
    ary:array[0..4] of char;
    与pchar一样!
     
      

  10.   

    str:string[5]
    是ShortString类型的了
      

  11.   

    str:string[5];
    ary:array[0..4] of char;
    这两个东西不一样啊,前面这个占用6byte内存,而后面这个是5byte。
    另外 array[0..4]是pchar兼容的类型(delphi定义下标从0开始的array是特殊的,即
    可以兼容pchar,函数原型要求是pchar的,直接可以代入而不需要类型转换)。
    另外,str:=‘12345’这样的赋值不太规范(我没有测过,也许也可以成功吧),
    因为str是一个array而不是string。
    另外,string内存是连续的。
      

  12.   

    iknowabc(我是我):你还有什么问题??那样不行吗?
      

  13.   

    to ch81:
    你说“你把getmem(pch,5);改为GetMem(pch,6)
    如果有问题,找我!我刚试过。你只给pch分配了5个空间,这就有问题了。
    pch后面必须要有一个0结束符。你不分配这一个空间,出现的问题就会很奇怪。
    所以你上面的随机的错误就很正常了”但是copymemory(pch,@ary[1],5)就能完全拷贝5个(ary为字符数组,见前述)。 我并没有改动pch为GetMem(pch,6)呀,这样怎么就可以正确拷贝?而string[5]就不行?
      

  14.   

    这个可能是它的里面的实现机制的问题了。
    象在我这边,更奇怪。我两种copymemory都是正确拷贝5个字符,你说怎么样。
    但是这些东西,很可能是不确定的。因为主要是pch的问题。
    哈哈,这些都是内核问题,可惜我看不懂汇编,要不能给你个更好的答案。
    sorry.
      

  15.   

    如果想吧ansistring copy到array of char中,应该怎么办?
      

  16.   

    正确答案来了:str:string[5];
    ary:array[1..5] of char;
    pch:pchar;
    getmem(pch,5);str:='12345';
    ary:='12345';copymemory(pch,@str[1],5);
    与copymemory(pch,@ary[1],5);有什么不同?
    ----------
    是一样的。在我这里结果都是$31 $32 $33 $34 $35
    str是否在内存中是连续的?
    ----------
    是连续的str与ary有什么不同,用法又有什么不同?
    ----------
    str: sizeof(str) = 6, 第0个元素为长度值。ShortString是Delphi 1的String类型,可以比较方便的进行串操作,如取串长度(Length),相加(+),取子串(Copy)等;
    ary: 仅为字符数组,sizeof(ary) = 5, 你不能进行以上操作,取串长度必须使用Windows的串操作(StrLen),并且有一个#0作串结束符;相加只能用StrCat且必须事先分配好目标地址空间;取子串必须先分配空间然后执行StrLCopy而且别忘了在最后加设一个#0(空字符)String的情况
    -------------
    String其实是一个指针,空串''其实是一个值为0的指针。有效的指针指向一个结构,包含了分配的大小(四个字节)、引用次数(四个字节)、串长度(四个字节)及一片内存区域。所以SizeOf(String变量)会等于4。不过Delphi会处理各种串运算,你不必劳神。