String Ada使用空值填充常量字符串

String Ada使用空值填充常量字符串,string,ada,String,Ada,我想创建一个常量字符串,如下所示: My_Null_String : constant String(1 .. 50) := "NULL***********************"; 所有*都是Ascii.Nul字符。无法通过其他关键字执行此操作,如: My_Null_String : constant String(1 .. 50) := "NULL" & (others => Ascii.Nul); 有没有一个优雅的解决方案,不需要使用大量的Ascii.Nul字符来填充

我想创建一个常量字符串,如下所示:

My_Null_String : constant String(1 .. 50) := "NULL***********************";
所有*都是
Ascii.Nul
字符。无法通过
其他
关键字执行此操作,如:

My_Null_String : constant String(1 .. 50) := "NULL" & (others => Ascii.Nul);
有没有一个优雅的解决方案,不需要使用大量的
Ascii.Nul
字符来填充字符串的其余部分

谢谢

那么:

My_Null_String : constant String(1 .. 50) := ('N','U','L','L', others => ASCII.Nul);
那么:

My_Null_String : constant String(1 .. 50) := ('N','U','L','L', others => ASCII.Nul);
您最初尝试的问题是为了评估

(others => ASCII.NUL)
程序必须有一种确定边界的方法。它没有,而且它不够聪明,无法进行计算,比如计算出这是由两个字符串连接而成的,因此我们可以计算出边界应该是第一个字符串求值后剩余的值。该语言必须针对这一点进行特殊处理(数组连接),但事实并非如此

您最初尝试的问题是为了评估

(others => ASCII.NUL)

程序必须有一种确定边界的方法。它没有,而且它不够聪明,无法进行计算,比如计算出这是由两个字符串连接而成的,因此我们可以计算出边界应该是第一个字符串求值后剩余的值。该语言必须针对这一点(数组连接)进行特殊处理,但事实并非如此。

我无法编译这一点。“预期类型”标准字符“找到字符串类型”语法类似于
1。。4=>
用于指定所有元素
1..4
都将设置为的数组元素(在本例中为
字符)。因为它们不会被设置为相同的值,所以这不起作用。类似于
(1=>'N',2=>'U',3..4=>'L',others=>Ascii.Nul)
可以工作,但它很难看。然后我的空字符串:常量字符串(1..50):=('N','U','L','L',others=>Ascii.Nul);我建议更新你的答案以反映你的最新评论。这不适合我。“预期类型”标准字符“找到字符串类型”语法类似于
1。。4=>
用于指定所有元素
1..4
都将设置为的数组元素(在本例中为
字符)。因为它们不会被设置为相同的值,所以这不起作用。类似于
(1=>'N',2=>'U',3..4=>'L',others=>Ascii.Nul)
可以工作,但它很难看。然后我的空字符串:常量字符串(1..50):=('N','U','L','L',others=>Ascii.Nul);我建议更新你的答案以反映你的最新评论。我会写
My_Null\u String'Last
而不是
50
。事实上,这是行不通的;定义一个值为50的常数并使用它,或者定义
子类型String50为String(1..50)
并使用
String50'Last
。(也许选择一个比
String50
更有意义的名称)@KeithThompson对,
My_Null\u String'Last
是不合法的。不能在自己的声明中使用变量的名称。你是对的,我在写评论的时候意识到了这一点(因此“实际上,这不起作用”)。我的观点(我应该说得更清楚)是,将数字
50
写两次是一种糟糕的做法。另一方面,我还没有想到一种方法可以在不编写大量过于冗长的代码的情况下清理这个特殊的案例;子类型Padded_String是String(1..50);My_Null_String:常量填充的_String:=Null_String&(1..Padded_String'Length-Null_String'Length=>ASCII.NUL)--Ick@KeithThompson是的,在一个真实的程序中我会这样做。我只是想让他克服编译问题。我会写
My_Null\u String'Last
而不是
50
。事实上,这是行不通的;定义一个值为50的常数并使用它,或者定义
子类型String50为String(1..50)
并使用
String50'Last
。(也许选择一个比
String50
更有意义的名称)@KeithThompson对,
My_Null\u String'Last
是不合法的。不能在自己的声明中使用变量的名称。你是对的,我在写评论的时候意识到了这一点(因此“实际上,这不起作用”)。我的观点(我应该说得更清楚)是,将数字
50
写两次是一种糟糕的做法。另一方面,我还没有想到一种方法可以在不编写大量过于冗长的代码的情况下清理这个特殊的案例;子类型Padded_String是String(1..50);My_Null_String:常量填充的_String:=Null_String&(1..Padded_String'Length-Null_String'Length=>ASCII.NUL)--Ick@KeithThompson是的,在一个真实的程序中我会这样做。我只是想让他克服他的问题。