コマンド ライン引数を ada プログラムの文字列変数に割り当てようとすると、いくつかの問題が発生します。
ここに私の主な手順があります:
with Ada.Command_Line; use Ada.Command_Line;
procedure proc is
cli_exception : exception;
filename : String (1..Argument(1)'length);
usage : String (1..31);
begin
usage := "Usage: ./proc [filename]";
if Argument_Count /= 1 then
raise cli_exception;
end if;
for arg in 1..Argument_Count loop
case arg is
when 1 =>
filename := Argument(arg);
when others =>
null;
end case;
end loop;
put_line("filename is: " & filename);
exception
when e: cli_exception =>
put_line(usage);
end proc;
ここでの問題は、文字列 "filename" の上限が設定されているプロシージャの宣言部分にあります。CLI 引数が指定されていない場合、Argument(1) は、引数 #1 がないため、手順が開始される前に例外をスローします。
出力は次のとおりです。
raised CONSTRAINT_ERROR : a-comlin.adb:65 explicit raise
無制限の文字列を使用せずに、任意の数値を選択せずにその文字列変数のサイズを定義する他の方法はありますか (完全修飾ファイル名が非常に大きくなる可能性があるため)。
-ありがとう