Node:Strings in BP and GPC, Next:Typed Constants, Previous:Objects, Up:Borland Pascal

### Strings in BP and GPC

Strings are "Schema types" in GNU Pascal which is something more advanced than Borland-style strings. For variables, you cannot specify just `String` as a type like in Borland Pascal; for parameters and pointer types you can. There is no 255 characters length limit. According to Extended Pascal, the maximum string length must be in (parentheses); GNU Pascal accepts [brackets], too, however, like BP.

For more about strings and schema types see Schema Types.

GPC supports Borland Pascal's string handling functions and some more (see String Operations):

Borland Pascal | GNU Pascal
`Length` | `Length`
`Pos` | `Pos, Index` (1)
`Str` | `Str, WriteStr` (1) (2)
`Val` | `Val, ReadStr` (2)
`Copy` | `Copy, SubStr, MyStr[2 .. 7]` (3)
`Insert` | `Insert`
`Delete` | `Delete`
`MyStr[0] := #7` | `SetLength (MyStr, 7)`
`=, <>, <, <=, >, >=` | `=, <>, <, <=, >, >=` (4)
| `EQ, NE, LT, LE, GT, GE`
n/a | `Trim`

Notes:

(1) The order of parameters of the Extended Pascal routines (`Index`, `WriteStr`) is different from the Borland Pascal routines.

(2) `ReadStr` and `WriteStr` allow an arbitrary number of arguments, and the arguments are not limited to numbers. `WriteStr` also allows comfortable formatting like `WriteLn` does, e.g. `WriteStr (Dest, Foo : 20, Bar, 1/3 : 10 : 2)`.

(3) `SubStr` reports a runtime error if the requested substring does not fit in the given string, `Copy` does not (like in BP).

(4) By default, the string operators behave like in BP. However, if you use the option `--no-exact-compare-strings` or `--extended-pascal`, they ignore differences of trailing blanks, so, e.g., `'foo'` and `'foo '` are considered equal. The corresponding functions (`EQ`, ...) always do exact comparisons.