[fpc-devel] Comparing arrays of char

Carsten Bager carsten at beas.dk
Mon Nov 2 11:08:46 CET 2009


Here is output from my program p compiled with Delphi (5) and FPC.
I believe that FPC fails because the first byte is chr(0)  when comparing 70501033728 with 
0.
I did run into this problem when moving code from a Pascal compiler that can compare 
records of the same type.
In Delphi I can come around this problem creating an array of char in the record of the same 
size and then comparing those.
But it looks like this doesn´t work in FPC.

Is this an error in FPC, or dos the compiler always look at an array of char as a null 
terminated string. 

Carsten


OK:70501033728/0
OK:70501033729/0
OK:70501033727/0

Error:70501033728/0
OK:70501033729/0
OK:70501033727/0




Free Pascal Compiler version 2.2.4 [2009/09/01] for arm
Copyright (c) 1993-2008 by Florian Klaempfl
Target OS: Linux for ARM
Compiling p.pp


Program p;


type
  t_typ=packed array[0..4] of char;
  b_typ=packed array[0..4] of byte;
  t2=record
    case integer of
      0:(t:t_typ);
      1:(b:b_typ);
      2:(i:Int64);
    end;


Var

b1,b2:t2;


Begin
  b2.i:=0;
  b1.i:=70501033728;
  if b1.t=b2.t then
    writeln('Error:',b1.i,'/',b2.i)
  else
    writeln('OK:',b1.i,'/',b2.i);
  b2.i:=0;
  b1.i:=70501033729;
  if b1.t=b2.t then
    writeln('Error:',b1.i,'/',b2.i)
  else
    writeln('OK:',b1.i,'/',b2.i);
  b1.i:=70501033727;
  if b1.t=b2.t then
    writeln('Error:',b1.i,'/',b2.i)
  else
    writeln('OK:',b1.i,'/',b2.i);
End.
------------------------------------

Error:70501033728/0
OK70501033729/0
OK70501033727/0
Med venlig hilsen
Carsten Bager

BEAS A/S
Brørupvænget 10
DK-7650 Bøvlingbjerg
Tlf. : +45 9788 5222 Fax : +45 9788 5434
www.beas.dk





More information about the fpc-devel mailing list