Ooooh, my goodness!
Thanks, mr. WickedX, for one more helpful explanation.
In the help files there is too little info about these commands, what made it impossible to me to find this out by myself. Thanks to you,
now I know.
How could I be so dumb?
Strings are like the ones in C, just 1D arrays of char variables. Now I understand...
Since I use RNGs for everything, I just need to replace the strings by integers and, if I need to store a string, I can just store its seed number and re-generate it on load. Nothing too complicated, and thanks to you, it is simpler than I ever thought.
It's all I need to produce savegames that no n00b will be able to edit using Notepad.

Now I can make my game as big as I want, because the player won't need to restart it all over every time he or she decides to resume playing.
After almost 2 gallons of coffee and an entire night without sleeping, waiting for a solution I couldn't find by myself, at least it came. Thank you once again, WickedX, you ROCK!
EDIT: I rewrote the code and guess what? It saves but don't load back the array...
f$ = "test.dat"
if file exist(f$) = 1 then delete file f$
open to write 1,f$
dim save(0) as integer
for i = 1 to 10
array insert at bottom save(0)
save(0) = rnd(9999999)
NEXT
make memblock from array 1,save(0)
make file from memblock 1,1
close file 1 : delete memblock 1 : undim save(0)
dim save(10) as integer
open to read 1,f$
make memblock from file 1,1
make array from memblock save(0),1
close file 1 : delete memblock 1
for i = 1 to array count(save(0))
print save(i)
NEXT
do
LOOP
EDIT: Well, I got it working.
It doesn't work with dynamic arrays. I need to dim it with the final size it will be and reload the memblock to an array with the same size. No queues, stacks or lists.
Is there any way to change the size of the array directly inside the memblock?
God is real - except if declared as integer.