Множество проблем в Ada фактически возвращаются к вашему первоначальному выбору типов. Так что лично я бы посоветовал немного переписать, чтобы сделать вашу жизнь проще:
subtype Row is String (1..Definitions.Tote_Page_Width + 1);
type Chars is array (Definitions.Number_Of_Rows) of Row;
Теперь вы могли бы записать это со следующим:
for I in The_Chars'range loop
Ada.Text_IO.Put_Line (The_Chars (I));
end loop;
Однако здесь все еще есть большая проблема. Put_Line
напечатает все символов в каждой строке. Строки Ada не заканчиваются нулем, поэтому, если в конце некоторых ваших строк есть неиспользуемые данные, они тоже будут напечатаны.
Есть много способов справиться с этим, но они сильно отличаются от тех, которые используются для обработки C-строк. Если вы попытаетесь работать со строками Ada так же, как со строками C, вы сведете с ума.
По этой причине я бы очень хотел видеть ваш код, который на самом деле заполняет The_Char
данными (и обоснованием этого).