Frank Church schrieb:
I recently posted a question about problems involving the use of
string and AnsiString when converting a Delphi program. Are the some
situations where substituting AnsiString for string will result in
errors?

The string type is a generic type and can be ShortString or AnsiString (or 
other string types). A compiler switch then decides what type will be used.

AnsiString and ShortString are quite different. AnsiStrings are much more complex (and require more care when using them i.e. in records) but have a maximum length of 2 (or 4?) GB while ShortStrings are simpler (and therefore often faster) but limited to 255 bytes. When switching from one to the other type you may need to have a close look on how the strings are used in the program. Maximum length can be an issue. AnsiStrings are pointers so Sizeof() gives back 4 bytes while for ShortStrings it is the (maximum) size of the string plus 1 length byte. There are lots of such differences that *may* be a problem but not neccessarily are in all cases.
There is also an (IMO) semantic logic error with AnsiStrings: Although they are 
pointers (pointing to the string) in most (but not all!) cases the compiler 
interprets them as the strings they points to. A := B is possible if A is a 
ShortString and B is an AnsiString (although A is not a pointer). It should 
have been A := B^ but Borland in their wise wisdom decided not to use this 
clear syntax. Though for low level routines like SizeOf and Fillchar it still 
uses the (correct) meaning of a pointer. So this may cause problems too.

Just check how both types are handled by the compiler and you will soon see 
where problems can arise.

For AnsiStrings see here: http://www.freepascal.org/docs-html/ref/refsu10.html

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to