domingo, 27 de enero de 2013

Ejemplo de toma de argumentos: Int argc, char **argv

En este post veremos cómo hacer para que nuestro programa en código c/c++ tome argumentos desde stdin utilizando los parámetros de la función principal (main) argc y argv.

Primero: ¿qué es argc y argv?

Argc es la cantidad de argumentos que se ingresaron a nuestro programa + 1. Es decir, Argc se asigna con un valor determinado en tiempo de ejecución. Y, como el nombre del programa se toma además como un argumento se le suma 1.

Argv es una matriz, o bien, vectores de cadenas. Argv contiene es su primer fila (osea *(argv + 0) o bien  *argv[0]) a la cadena que contiene el nombre del programa y en las demás filas contiene cadenas con los nombres de los argumentos enviados al programa.

La idea es la siguiente: NO debemos darle ningún valor a argv o argc ya que éstos se resuelven en tiempos de ejecución. Lo que sí debemos de hacer es generar un ciclo exacto de argc-1 cantidad de iteraciónes (recordemos que argc contiene además una unidad extra que como mencioné anteriormente corresponde al nombre del programa como argumento) y por cada iteración de nuestro bucle, comparar con strcmp de cstring la indirección de argv[i] donde obviamente la variable i corresponde al número de iteración del bucle.

Resulta útil demostrar lo anteriormente dicho con un buen código en c++.

  
 Como se puede apreciar en la imágen, la línea 7, el condicional verifica que si argc es 1 no hay argumentos. En el caso contrario, como debe atender a cada uno de los argumentos tomados, genera el ciclo (línea 12) desde 1 hasta argc cantidad de iteraciónes y por cada iteración, como anteriormente he mencionado, compara la indirección de la fila de la matriz con una cadena constante que representa a el nombre del argumento que nosotros tomaremos en nuestro programa. Sería recomendable que, a este programa, se le añada una validación dentro del for que verifique el ingreso de un argumento no deseado.

Argc y argv se encuentran en diversos programas, por ej, el comando de bash LS, si argc es 1 muestra el contenido del directorio en el que estaríamos situados, si argc es 2 muestra el contenido del directorio tomado como argumento; mplayer, para indicar la ruta absoluta o relativa a la cancion a escuchar; &c.

Un programa que se me ocurriría hacer ( y tal vez lo haga si tengo ganas jeje) con esto de la toma de argumentos es; un programa el cual tome palabras como argumento y en base a una determinada palabra ingresada, llama al reproductor mplayer dándole como argumento la ruta de un archivo de sonido; El resultado en este caso sería algo así como el textaloud con la voz del gallego tan famoso en internet.

0 comentarios:

Publicar un comentario

Dejanos tu comentario

 
Web Analytics