在 Ada 中初始化固定长度字符串的最佳方法是什么?
What is the best way for initializing a fixed-length string in Ada?
我想在 Ada 中初始化一个固定长度的 String
,大致如下所示:
S : String (1..256) := ("Hello", others => Character'Val (0));
我在尝试编译时遇到错误。 有什么方法可以实现类似上面的东西吗?
您的代码无法编译的原因是 String 是一个 Character 数组,因此等效项是
s : String(1..256) := (1 => 'H',
2 => 'e',
3 => 'l',
4 => 'l',
5=> 'o',
others => Character'Val(0));
这显然远非理想。
另一种方法是使用 Ada.Strings.Fixed 中的 Move 过程。
Move(Target => s,
Source => "Hello",
Pad => Character'Val(0));
但是不能在声明中做到这一点。
最后,编译:
s : String(1..256) := "Hello" & (6..256 => Character'Val(0));
但我觉得不太清楚
我通常会做这样的事情
Hello : constant String := "Hello";
Desired_Length : constant := 256;
S : String := Hello & (1 .. Desired_Length - Hello'Length => Character'Val (0) );
或
(Hello'Length + 1 .. Desired_Length => ...);
我想在 Ada 中初始化一个固定长度的 String
,大致如下所示:
S : String (1..256) := ("Hello", others => Character'Val (0));
我在尝试编译时遇到错误。 有什么方法可以实现类似上面的东西吗?
您的代码无法编译的原因是 String 是一个 Character 数组,因此等效项是
s : String(1..256) := (1 => 'H',
2 => 'e',
3 => 'l',
4 => 'l',
5=> 'o',
others => Character'Val(0));
这显然远非理想。
另一种方法是使用 Ada.Strings.Fixed 中的 Move 过程。
Move(Target => s,
Source => "Hello",
Pad => Character'Val(0));
但是不能在声明中做到这一点。
最后,编译:
s : String(1..256) := "Hello" & (6..256 => Character'Val(0));
但我觉得不太清楚
我通常会做这样的事情
Hello : constant String := "Hello";
Desired_Length : constant := 256;
S : String := Hello & (1 .. Desired_Length - Hello'Length => Character'Val (0) );
或
(Hello'Length + 1 .. Desired_Length => ...);