You have 2 types of string (with 8bit chars). The term "string" can refer to either one depending on compiler setting "{$H+}" / "{$H-}"
ShortString[n] => fixed max length of n, with n between 1 and 255
AnsiString => variable length string.
The variable internally is a pointer, and memory is allocated, re-allocated and deallocated as needed.
type
TStr3 = shortstring[3];
TStr200 = shortstring[200];
Will declare the 2 types of string you need.
But an array (even with multiple dimensions) all elements, in all dimension must be the same type.
So
Array[n,0]
Array[n,1]
Both must be of the same type.
You can not have one of them TStr3 and the other TStr255.
Instead you can however have an array of record.
MyArray: Array of record
s3: shortstring[3];
s200: shortstring[200];
end;
Then you can do
SetLength(MyArray, 100); // only one dimension
MyArray[n].s3 := '123';
MyArray[n].s200 := 'abc.........';
In the type declaration, instead of shortstring[20] you can do String[20].
That will always be shortstring, as ansistring can not have a length declaration.