0

コマンド ライン引数を 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

無制限の文字列を使用せずに、任意の数値を選択せず​​にその文字列変数のサイズを定義する他の方法はありますか (完全修飾ファイル名が非常に大きくなる可能性があるため)。

-ありがとう

4

1 に答える 1