C Argumentos de línea de comandos
Al ejecutar el programa, se pueden pasar valores desde la línea de comandos al programa en C. Estos valores se denominanargumentos de línea de comandos, son importantes para el programa, especialmente cuando se desea controlar el programa desde el exterior en lugar de codificar estos valores en el código.
En C, los argumentos de línea de comandos son un método para obtener entrada desde la línea de comandos, que se puede utilizar para pasar información al programa al ejecutarlo. Los argumentos de línea de comandos se pasan al programa a través de los parámetros de la función main. El prototipo de la función main puede ser una de las siguientes dos formas:
int main(int argc, char *argv[]);
O:
int main(int argc, char **argv);
argc(argument count): indica el número de argumentos de línea de comandos, incluido el nombre del programa. Por lo tanto,argcal menos es 1.argv(argument vector): es un puntero a un arreglo de cadenas, donde cada cadena es un argumento de línea de comandos. El primer elemento del arreglo (es decir,argv[0]) suele ser el nombre del programa. Los siguientes elementos son los argumentos de línea de comandos pasados al programa.
A continuación se muestra un ejemplo sencillo que verifica si se proporcionaron argumentos en la línea de comandos y realiza la acción correspondiente según el argumento:
Ejemplo
int main( int argc, char *argv[] )
{
if( argc == 2 )
{
printf("The argument supplied is %s\n", argv[1]);
}
else if( argc > 2 )
{
printf("Too many arguments supplied.\n");
}
else
{
printf("One argument expected.\n");
}
}
Usando un argumento, compile y ejecute el código anterior, producirá el siguiente resultado:
$./a.out testing The argument supplied is testing
Usando dos argumentos, compile y ejecute el código anterior, producirá el siguiente resultado:
$./a.out testing1 testing2 Too many arguments supplied.
Sin pasar ningún argumento, compile y ejecute el código anterior, producirá el siguiente resultado:
$./a.out One argument expected
Cabe señalar queargv[0]almacena el nombre del programa,argv[1]es un puntero al primer argumento de línea de comandos, *argv[n] es el último argumento. Si no se proporciona ningún argumento, argc será 1; de lo contrario, si se pasa un argumento,argcse establecerá en 2.
Los argumentos de línea de comandos se separan por espacios, pero si el argumento en sí contiene espacios, al pasarlo debe colocarse entre comillas dobles "" o comillas simples ''. Reescribamos el ejemplo anterior, con un espacio, entonces puede pasarlo colocándolo entre comillas dobles o simples. Reescribamos el ejemplo anterior para pasar al programa un argumento de línea de comandos colocado entre comillas dobles:
Ejemplo
int main( int argc, char *argv[] )
{
printf("Program name %s\n", argv[0]);
if( argc == 2 )
{
printf("The argument supplied is %s\n", argv[1]);
}
else if( argc > 2 )
{
printf("Too many arguments supplied.\n");
}
else
{
printf("One argument expected.\n");
}
}
Usando un argumento simple separado por espacios, con el argumento entre comillas dobles, compile y ejecute el código anterior; producirá el siguiente resultado:
$./a.out "testing1 testing2" Progranm name ./a.out The argument supplied is testing1 testing2
Casos de uso
Los argumentos de línea de comandos son útiles en muchos casos, por ejemplo:
- Ruta del archivo de configuración
- Selección de modo (por ejemplo, modo de depuración)
- Nombres de archivos de entrada y salida
- Opciones y banderas en tiempo de ejecución (como
-vindica el modo detallado)
Notas
- Los argumentos de línea de comandos suelen ser cadenas; si necesita convertirlos a un tipo numérico, puede usar funciones de la biblioteca estándar como
atoiostrtol。 - Siempre se deben validar y procesar los argumentos de línea de comandos para evitar entradas incorrectas o maliciosas.