I've worked out what the issue was when I tried to do the lookup version of fizbuzz with arrays instead of data.
Until you assign to a string array, it is "" which is fine.
As soon as you assign anything to it it sets length to the max, pads with spaces (so any subsequent appends will silently dump the string you try and append to an array entry I think... which was the issue I came up against).
As soon as you assign to an array slot it's no longer "" so you can't use that to check if you didn't append anything to it (which is how that version of fizzbuzz works).
BBC and Amstrad Basic restricted strings to length 255 I think and had a byte count before the string data IIRC, so everything worked (unless you wanted a string of length 256+).
BBC arrays (and maybe Amstrad ones) used 0 as an index as well and allocate 1 more entry than you ask for as well (which can be useful I suppose but if it's zero based they should probably have done the sensible thing and only allowed indices from 0 to size-1... that would cause incompatibilities with other BASICs though which assume indices start from 1 (which is daft anyway, programmers start counting from 0)
I think Pascal allows you to set the staring index for arrays (which is best of both worlds in a way but has a runtime performance cost).
Strings in BASIC are slow anyway since if you resize one it tries to compact the memory usage IIRC.
I'm not a fan of BASIC anyway
At least in ASM you can implement strings however you want. On a non 8-bit machine I would use C or a higher level language of course (although string and memory handling in C leaves a lot to be desired).