procedure TForm1.Button2Click(Sender: TObject);
var
  s:string[6];
const
  ss = '100001';
  a: array[0..9] of byte = ($31,$30,$30,$30,$30,$31,$0,$0,$0,$0);
begin
  move(a[0], s[1],6);  if s = ss then
    showmessage('ok');
end;这段代码运行一下,你会发现对话框弹不出来,不知是否DELPHI的BUG,问下如何比较才能相等,或如何赋值才能使得其相等?不要说另外写一个比较函数比较前N位,那就没意思,也不是我的本意。PS:(字符0和1分别对应 $30,$31)

解决方案 »

  1.   

    string[6]; 有个很特殊的地方, 第一个位置也就是S[0]是这个字符串的长度, 但是你现在直接用Move的方式0的位置是未知的一个数字, 你应该在前面加上一句话 s[0] =#6;
      

  2.   

    了解Delphi中string的内存结构后你就不会觉得蹊跷了。
      

  3.   


    //以后不要用这种标题来发贴了,还以为发现什么新大陆一样:)
    var
      s:string[6];
    const
      ss = '100001';
      a: array[0..9] of byte = ($31,$30,$30,$30,$30,$31,$0,$0,$0,$0);
    begin
       SetLength(s,6);//分配内存
       move(a[0], s[1],6);
      if s = ss then
        showmessage('ok');
    end;
      

  4.   

    确实如楼上说的,没分配内存。var
      s:string;                    //唉
    const
      ss = '100001';
      a: array[0..9] of byte = ($31,$30,$30,$30,$30,$31,$0,$0,$0,$0);
    begin
       SetLength(s,6);             //分配内存
       move(a[0], s[1],6);
      if s = ss then
        showmessage('ok');
    end;