Saltar al contenido principal
LibreTexts Español

14.1: Argumentos de línea de comandos

  • Page ID
    82164
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Pregunta: ¿Cómo “leen” varias utilidades los argumentos que coloca después de ellos en la línea de comandos? Por ejemplo, podría tener una utilidad que archiva (comprime) un archivo, creando un nuevo archivo (comprimido). Puede usarlo así desde un símbolo de DOS o shell:

    C:>archive foo.txt foo.arc
    

    El programa se llama archive (archive.exe), y le estás diciendo que comprima el archivo foo.txt y cree un nuevo archivo llamado foo.arc. Esto es mucho más rápido que usar la entrada de tipo scanf () desde dentro del programa (es decir, hacer que el usuario ejecute el programa, momento en el que el programa solicita los dos nombres de archivo). C permite un método muy sencillo de obtener estos argumentos de línea de comandos. Esto requiere una modificación a la declaración de main ():

    void main( int argc, char *argv[] )
    

    El primer parámetro se llama el argumento count y le indica cuántos elementos (cadenas) se ingresaron en la línea de comandos. En el ejemplo anterior, argc sería 3. El segundo parámetro se llama vector argumento. Es una matriz de punteros a cadenas. Estas cadenas son los elementos ingresados en la línea de comandos. Así argv [0] apunta a “archivo”, argv [l] apunta a "foo.txt “, y argv [2] apunta a “foo.arc”.

    Si argc es 1, entonces no se agregaron argumentos después del nombre del ejecutable. A continuación se muestra un ejemplo de eco simple. Esto hará eco de lo que se haya escrito en la línea de comandos.

    void main( int argc, char *argv[] )
    {
        int x;
        
        for( x=0; x<argc; x++ )
            printf( "Argument %d is %s\n", x, argv[x] );
    }
    

    Tenga en cuenta que dado que argv es una matriz de punteros, entonces argv [x] también es un puntero, y se trata como cualquier otro puntero a caracteres. Así, puedes usar funciones como strcpy () o strcmp () en él. Para argumentos numéricos (como “archive blah 23"), puede convertir la cadena ASCII (“23") en un entero, entero largo o float a través de las funciones atoi (), atol () y atof (), respectivamente.

    Otras posibilidades incluyen imprimir direcciones si argc es 1 o si el único argumento agregado es “? ”. Es posible llevar esto más lejos agregando “switches” o “flags” a la lista de argumentos para que los argumentos puedan presentarse en cualquier orden. Esto es precisamente lo que se hace si el compilador o el vinculador se ejecuta directamente en lugar de a través del IDE.

    En resumen, los argumentos de línea de comandos son una forma muy práctica y rápida de introducir valores en un programa. Como ejercicio, modifique uno de sus programas anteriores para utilizar argumentos de línea de comandos en lugar del enfoque scanf ().


    This page titled 14.1: Argumentos de línea de comandos is shared under a CC BY-NC-SA 4.0 license and was authored, remixed, and/or curated by James M. Fiore via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.