usar sirve que para como arg c++ parameters command-line-arguments argv argc

c++ - sirve - ¿Qué significa int argc, char*argv[]?



int main int argc char*argv]) (8)

Ambos

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

Son definiciones legales del punto de entrada para un programa C o C ++. Stroustrup: Preguntas frecuentes sobre el estilo y la técnica de C ++ detalla algunas de las variaciones posibles o legales para su función principal.

En muchos IDE y compiladores de C ++, cuando genera la función principal para ti, se ve así:

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

Cuando codifico C ++ sin un IDE, solo con un compilador de línea de comandos, escribo:

int main()

Sin ningún parámetro. ¿Qué significa esto, y es vital para mi programa?


El primer parámetro es el número de argumentos proporcionados y el segundo parámetro es una lista de cadenas que representan esos argumentos.


La función main puede tener dos parámetros, argc y argv . argc es un parámetro entero ( int ), y es el número de argumentos pasados ​​al programa.

El nombre del programa siempre es el primer argumento, por lo que habrá al menos un argumento para un programa y el valor mínimo de argc será uno. Pero si un programa tiene dos argumentos, el valor de argc será tres.

El parámetro argv apunta a una matriz de cadenas y se denomina vector de argumento . Es una matriz de cadena unidimensional de argumentos de función.


Los parámetros a main representan los parámetros de línea de comando proporcionados al programa cuando se inició. El parámetro argc representa el número de argumentos de la línea de comando, y char *argv[] es una matriz de cadenas (punteros de caracteres) que representan los argumentos individuales proporcionados en la línea de comando.


Supongamos que ejecutas tu programa (usando la sintaxis sh ):

myprog arg1 arg2 ''arg 3''

Si declaró su main como int main(int argc, char *argv[]) , entonces (en la mayoría de los entornos), su main() se llamará como si:

p = { "myprog", "arg1", "arg2", "arg 3", NULL }; exit(main(4, p));

Sin embargo, si declara su main como int main() , se llamará algo así como

exit(main());

y no se pasan los argumentos.

Dos cosas adicionales a tener en cuenta:

  1. Estas son las únicas dos firmas de mandato estándar para main . Si una plataforma en particular acepta argumentos adicionales o un tipo de retorno diferente, entonces esa es una extensión y no se debe confiar en un programa portátil.
  2. *argv[] y **argv son exactamente equivalentes, por lo que puede escribir int main(int argc, char *argv[]) como int main(int argc, char **argv) .

argc es el número de argumentos que se pasan a su programa desde la línea de comandos y argv es la matriz de argumentos.

Puedes recorrer los argumentos sabiendo el número de ellos como:

for(int i = 0; i < argc; i++) { // argv[i] is the argument at index i }


argv y argc son la forma en que los argumentos de la línea de comando se pasan a main() en C y C ++.

argc será el número de cadenas señaladas por argv . Esto será (en la práctica) 1 más el número de argumentos, ya que prácticamente todas las implementaciones incluirán el nombre del programa en la matriz.

Las variables se denominan argc ( cuenta de argumentos ) y argv ( vector de argumento ) por convención, pero se les puede dar cualquier identificador válido: int main(int num_args, char** arg_strings) es igualmente válido.

También se pueden omitir por completo, dando como resultado int main() , si no tiene la intención de procesar argumentos de línea de comando.

Prueba el siguiente programa:

#include <iostream> int main(int argc, char** argv) { std::cout << "Have " << argc << " arguments:" << std::endl; for (int i = 0; i < argc; ++i) { std::cout << argv[i] << std::endl; } }

Si lo ejecuta con ./test a1 b2 c3 saldrá

Have 4 arguments: ./test a1 b2 c3


int main();

Esta es una declaración simple. No puede tomar ningún argumento de línea de comando.

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

Esta declaración se usa cuando su programa debe tomar argumentos de línea de comando. Cuando se ejecuta como tal:

myprogram arg1 arg2 arg3

argc , o Argument Count, se establecerá en 4 (cuatro argumentos), y argv , o Argument Vectors, se rellenarán con punteros a "myprogram", "arg1", "arg2", y "arg3". ¡La invocación del programa ( myprogram ) está incluida en los argumentos!

Alternativamente, podrías usar:

int main(int argc, char** argv);

Esto también es válido.

Hay otro parámetro que puedes agregar:

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

El parámetro envp también contiene variables de entorno. Cada entrada sigue este formato:

VARIABLENAME=VariableValue

Me gusta esto:

SHELL=/bin/bash

La lista de variables de entorno está terminada en nulo.

IMPORTANTE: ¡NO use ningún valor argv o envp directamente en las llamadas a system() ! Este es un gran agujero de seguridad, ya que los usuarios malintencionados podrían establecer variables de entorno para los comandos de la línea de comandos y (potencialmente) causar un daño masivo. En general, simplemente no use system() . Casi siempre hay una mejor solución implementada a través de bibliotecas C