es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo copiar datos desde String access a Ada.String.

Tengo el siguiente fragmento de código:

with GNAT.Command_Line; use GNAT.Command_Line;
with GNAT.Strings;      use GNAT.Strings;

Define la función:

Define_Switch
           (Config      => Config, Output => File_Name'Access,
            Long_Switch => "--file=", Switch => "-f=",
            Help        => "Archivo con la Composición");

Después de analizar la línea de comandos usando Getopt, tengo acceso al objeto que apunta al nombre de archivo actual. Me gustaría copiar este nombre a una cadena fija Ada.String definida como:

File_Name : String(1 .. 256);

Puedo imprimir en la consola los datos de File_Name’Access como:

Put_Line(File_Name.all);

Creo que debería proporcionar algo como una operación de copia y luego liberar el objeto de acceso. ¿Cómo puedo hacerlo?

Gracias.
Alex

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para copiar el nombre de archivo desde el objeto de acceso a la cadena fija, puedes utilizar el procedimiento ‘Get’ del paquete Ada.Strings.Fixed. Aquí tienes un ejemplo de código:

    with Ada.Strings.Fixed; use Ada.Strings.Fixed;
    with GNAT.Command_Line; use GNAT.Command_Line;
    with GNAT.Strings;      use GNAT.Strings;
    
    ...
    
    Config : GNAT.Strings.String_Access;
    File_Name : String(1 .. 256);
    
    ...
    
    Define_Switch
           (Config      => Config, Output => File_Name'Access,
            Long_Switch => "--file=", Switch => "-f=",
            Help        => "Archivo con Composición");
    
    ...
    
    Getopt;
    
    -- Copiar el nombre de archivo a la cadena fija
    File_Name := To_Fixed(String_Value => Get(File_Name'Access), Width => File_Name'Length);
    
    -- Imprimir la cadena fija
    Put_Line(File_Name);
    
    -- Liberar el objeto de acceso
    Free(File_Name'Access);
    

    En este código, el procedimiento ‘To_Fixed’ se utiliza para copiar el valor de la cadena desde el objeto de acceso a la cadena fija ‘File_Name’. El parámetro ‘Width’ se utiliza para especificar la longitud de la cadena fija. Finalmente, el objeto de acceso se libera utilizando el procedimiento ‘Free’.

Comments are closed.