100 of 208
ZBasic Language Reference 92 ZX Microcontroller Family need be to accommodate the string value assigned to it. One additional advantage to using dynamically allocated strings is that the string storage will never be overrun because it is changed dynamically and limited to the maximum size of 255 characters automatically. The 4 bytes of User RAM for a dynamically allocated string variable are used in the following manner: Dynamically Allocated String Storage Layout Offset Length Description 0 1 The current string length, in bytes. 1 1 A marker identifying the string location: &He0 – RAM (allocated from the heap) &He2 – Program Memory &He3 – Persistent Memory &He4 – RAM (not allocated) &He5 – RAM (not allocated, limited to 2 chars max.) &He6 – RAM (pointer refers to a statically allocated string) 2 2 For type &He5, the one or two characters of the string. For type &He6, the address of a statically allocated string variable (see below). For all other types, the address of the first character of the string. For statically allocated strings, including Bounded Strings and Fixed Length strings, the space allocated for the variable is used in the following manner: Statically Allocated String Storage Layout Offset Length Description 0 1 The current string length, in bytes. 1 1 A marker identifying the string characteristics: &H00 – fixed allocation, variable length &Hff – fixed allocation, fixed length 2 N The characters of the string where N is the defined string length. For Fixed Length strings the byte at offset zero will be constant and the byte at offset 1 will have the value &Hff to indicate that it is a Fixed Length string. Fixed-Length String Storage Layout Offset Length Description 0 1 The string length, in bytes. 1 1 A marker identifying the string characteristics: &Hff – fixed allocation, fixed length 2 N The characters of the string where N is the fixed string length. 3.26.3 String Address and String Type Generally, you needn’t be concerned about the technical details regarding strings described in the preceding section. For certain special situations, however, it may be useful directly access a string variable’s inner data components. The StrAddress() function works with all of the string types described above and will return the address of the first character of the string storage. Note, however, that for dynamically allocated strings if the string’s length is zero the returned address will be of no use (it will generally be zero). Moreover, the returned address may be an address in RAM, in Program Memory or in Persistent Memory. Depending on where the string’s characters are stored you must use different System Library Functions to retrieve the string’s characters. You can use the System Library function StrType() to determine the nature of the string’s storage. It will return the second byte of the string variable’s storage space. See the tables above for the values and their meaning.