Причина, по которой ваш код не компилируется, состоит в том, что String является массивом символов, поэтому эквивалент будет
s : String(1..256) := (1 => 'H',
2 => 'e',
3 => 'l',
4 => 'l',
5=> 'o',
others => Character'Val(0));
Что явно далеко от идеала.
Другой способ - использовать процедуру Move в Ada.Strings.Fixed .
.
Move(Target => s,
Source => "Hello",
Pad => Character'Val(0));
Но этого нельзя сделать в декларации.
Наконец, это компилируется:
s : String(1..256) := "Hello" & (6..256 => Character'Val(0));
Но я нахожу это менее ясным