Индексный доступ к элементам строки для записи

Стандартно Blitzmax не позволяет записывать в строку, используя индексный доступ. Но с помощью небольшого трюка это можно забороть.
Вот исходник, показывающий подробно, как это делается:
Local str$ = "Hello"
Print str

Local
p:IntPtr = IntPtr(Varptr(str))
Local
pchar:ShortPtr = ShortPtr(p[0])
pchar :+ 6
'this offset depends on String structure

pchar[0]=
Asc("H")
pchar[1]=
Asc("e")
pchar[2]=
Asc(" ")
pchar[3]=
Asc("h")
pchar[4]=
Asc("e")

Print str
Или вот так в одну строку можно получить указатель на первый символ:
Local pchar:Short Ptr = Short Ptr(Int Ptr(Varptr(str))[0]) + 6
Как видно из примера, мы просто получаем указатель на первый элемент строки во внутренней структуре строкового типа языка.
Ссылка на статью с другими советами: http://blitzmax.3dn.ru/publ/3-1-0-8

Комментариев нет: