Argumentos de Línea de Comandos en C: Guía Completa con Ejemplos
Los programas en C, como cualquier otro programa, interactúan con el usuario. Una forma de obtener información del usuario es mediante la función scanf(), la cual permite leer datos desde la entrada estándar (generalmente el teclado). Sin embargo, existe una forma más poderosa y flexible de proporcionar datos a un programa C: los argumentos de línea de comandos.
Los argumentos de línea de comandos son valores que se pasan al programa al ejecutarlo desde la terminal. Estos argumentos permiten personalizar el comportamiento del programa y proporcionar información adicional sin necesidad de interactuar con el usuario durante la ejecución.
Entendiendo argc y argv[]
Para acceder a los argumentos de línea de comandos en C, la función main() recibe dos argumentos: argc y argv[]. argc es un entero que representa el número de argumentos que se pasan al programa, incluyendo el nombre del programa en sí. argv[] es un arreglo de punteros a caracteres, donde cada elemento apunta a una cadena de texto que corresponde a un argumento individual.
Por ejemplo, si ejecutamos el comando ./mi_programa argumento1 argumento2, argc será 3 (incluyendo el nombre del programa) y argv[] contendrá los siguientes valores:
argv[0]: «./mi_programa»argv[1]: «argumento1»argv[2]: «argumento2»
Accediendo a los Argumentos
Para acceder a los argumentos dentro del programa C, podemos iterar sobre el arreglo argv[] utilizando un bucle for. Cada elemento de argv[] es una cadena de texto que representa un argumento.
«`c
include
int main(int argc, char *argv[]) {
printf(«Número de argumentos: %dn», argc);
for (int i = 0; i < argc; i++) {
printf(«Argumento %d: %sn», i, argv[i]);
}
return 0;
}
«`
Si compilamos y ejecutamos este programa con los argumentos «Hola» y «Mundo», la salida será:
Número de argumentos: 3
Argumento 0: ./mi_programa
Argumento 1: Hola
Argumento 2: Mundo
Usando Argumentos Numéricos
En muchos casos, es necesario convertir los argumentos de línea de comandos a números para realizar cálculos o comparaciones. Para ello, podemos usar la función atoi(), que convierte una cadena de texto a un entero.
«`c
include
include // Para usar atoi()
int main(int argc, char *argv[]) {
if (argc != 3) {
printf(«Error: Se necesitan dos argumentos numéricos.n»);
return 1;
}
int numero1 = atoi(argv[1]);
int numero2 = atoi(argv[2]);
printf(«La suma de %d y %d es: %dn», numero1, numero2, numero1 + numero2);
return 0;
}
«`
Este programa espera dos argumentos numéricos y calcula su suma. Si no se proporcionan dos argumentos, muestra un mensaje de error.
Manejando Argumentos con Espacios
Si un argumento de línea de comandos contiene espacios, es necesario delimitarlo con comillas dobles o simples. Por ejemplo, para pasar el argumento «Hola Mundo» al programa, deberíamos ejecutar el comando: ./mi_programa "Hola Mundo".
Dentro del programa, el argumento «Hola Mundo» estará disponible en argv[1].
Ejemplos Prácticos
1. Programa que calcula el factorial de un número:
«`c
include
include
int main(int argc, char *argv[]) {
if (argc != 2) {
printf(«Error: Se necesita un argumento numérico.n»);
return 1;
}
int numero = atoi(argv[1]);
if (numero < 0) {
printf(«Error: El número debe ser positivo.n»);
return 1;
}
int factorial = 1;
for (int i = 1; i <= numero; i++) {
factorial *= i;
}
printf(«El factorial de %d es: %dn», numero, factorial);
return 0;
}
«`
Para ejecutar este programa, podemos usar el comando ./mi_programa 5 para calcular el factorial de 5.
2. Programa que muestra la información de un archivo:
«`c
include
include
include // Para usar stat()
int main(int argc, char *argv[]) {
if (argc != 2) {
printf(«Error: Se necesita el nombre del archivo como argumento.n»);
return 1;
}
struct stat fileinfo;
if (stat(argv[1], &fileinfo) == -1) {
perror(«stat»);
return 1;
}
printf(«Nombre del archivo: %sn», argv[1]);
printf(«Tamaño del archivo: %lld bytesn», fileinfo.stsize);
printf(«Fecha de modificación: %s», ctime(&fileinfo.stmtime));
return 0;
}
«`
Para ejecutar este programa, podemos usar el comando ./mi_programa mi_archivo.txt para obtener información sobre el archivo «mi_archivo.txt».
Conclusión
Los argumentos de línea de comandos en C son una herramienta poderosa para personalizar y controlar el comportamiento de los programas. Mediante el uso de argc y argv[], podemos acceder a los datos proporcionados por el usuario al ejecutar el programa desde la terminal. Esta funcionalidad permite crear programas más flexibles, interactivos y útiles para una amplia gama de aplicaciones.