Tutorial de Programación en C para Linux, parte 22 – Acceso a los argumentos de la línea de comandos dentro de un programa en C

En el tutorial anterior, discutimos múltiples conceptos relacionados con los punteros en el lenguaje de programación C. Uno de los conceptos que tratamos fue el de matriz de punteros. Utilizamos el ejemplo de una matriz de punteros enteros para demostrar el concepto.

Cómo acceder a los argumentos de la línea de comandos dentro de un programa C

Pero como mencionamos en ese tutorial, una matriz de punteros puede ser de distintos tipos. Por ejemplo, aquí tienes una matriz de punteros a caracteres:

char *arr[] = {"HowtoForge", "FaqForge", "Linux"};

Y aquí tienes un pequeño programa que muestra cómo se puede utilizar esta matriz:

#include <stdio.h>

int main()
{
char *arr[] = {«HowtoForge», «FaqForge», «Linux»};

printf(«\n %s», *arr);
printf(«\n %s», *(arr+1));
printf(«\n %s», *(arr+2));

return 0;
}

‘arr’ es la dirección del primer elemento de esta matriz. Ahora bien, como se trata de una matriz de punteros, el primer elemento (y todos los demás elementos, a los que se accede sumando 1 y 2 a arr) no es más que la dirección. Así que para acceder al valor que guarda esa dirección, utilizamos el operador *.

A continuación se muestra la salida de este programa:

HowtoForge 
FaqForge 
Linux

Así es como se accede a los valores de una matriz de punteros de caracteres. Ahora, debes estar pensando ¿por qué hemos hablado de todo esto?

Bueno, lo hicimos porque esto nos lleva a otro concepto importante, que es la capacidad de acceder a argumentos de la línea de comandos en entornos que soportan el lenguaje de programación C. Hablemos de ello en detalle.

Como ya deberías saber, «main» es la primera función de tu programa a la que se llama cuando se ejecuta el programa. Se llama con dos argumentos: argc y argv. Mientras que el primero te indica el número de argumentos de la línea de comandos, el segundo es en realidad una matriz de punteros a los propios argumentos.

Ten en cuenta que el propio nombre del programa se pasa como argumento a la función principal. Por eso, el número de argumentos -representado por argc- es uno más que el número real de argumentos pasados al programa. A continuación se muestra un ejemplo:

#include <stdio.h>

int main(int argc, char *argv[])
{
printf(«\n %d», argc);
printf(«\n %s», *argv);

return 0;
}

Ahora, ejecutamos este programa – llamado a.out, y presente en el directorio ‘home’ de nuestro sistema – sin ningún argumento. Y aquí está la salida:

 1 
 /home/a.out

Como puedes ver, el nombre de ejecución del programa se pasó como argumento. Si hubiera utilizado el siguiente comando

/home/a.out htf ff

En ese caso, argc habría sido 3 y argv habría contenido las direcciones de las cadenas ‘/home/a.out’, ‘htf’ y ‘ff’.

Aquí tienes una forma mejor de escribir el programa de impresión de argumentos:

#include <stdio.h>

int main(int argc, char *argv[])
{
for(int i=0; i<argc; i++)
printf(«\n %s», *(argv+i));

return 0;
}

Conviene recordar que los argumentos se almacenan en la matriz en el mismo orden en que se pasan en la línea de comandos.

Conclusión

Es probable que te encuentres con varias situaciones en las que tengas que tratar con argumentos de la línea de comandos dentro de tu código C. Lo que hemos tratado aquí debería servirte de base. Prueba algunos programas para hacerte una mejor idea de cómo se accede a los argumentos de la línea de comandos dentro de un programa en C.

Scroll al inicio