Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Locura_23 en 23 Mayo 2021, 21:18 pm



Título: int main (int argc, char* argv[])
Publicado por: Locura_23 en 23 Mayo 2021, 21:18 pm
Para qué sirven exactamente estos argumentos en main ?


Título: Re: int main (int argc, char* argv[])
Publicado por: DtxdF en 23 Mayo 2021, 21:39 pm
Hola @Locura_23

argc: Argument Count, que indica la cantidad de argumentos dados por la entidad que ejecutará este programa.
argv: Argument Vector, ya serían los argumentos proporcionados en sí, siendo una lista de cadenas.

Si, por ejemplo, tenemos el siguiente código:

main.c:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char **argv)
  5. {
  6.    char *arg;
  7.    while ((arg = *argv++))
  8.        puts(arg);
  9.  
  10.    return EXIT_SUCCESS;
  11.  
  12. }

Compilamos:

Código
  1. cc main.c -o main

Al ejecutarlo sin argumentos este programa, se mostrará en la salida del terminal el nombre del programa, que para este caso es main.c.

Código
  1. ./main
  2. # Salida:
  3. # ./main

Pero si ejecutaramos el programa con argumentos:

Código
  1. ./main "Primer argumento" "Segundo argumento" "Tercer argumento"
  2. # Salida:
  3. # ./main
  4. # Primer argumento
  5. # Segundo argumento
  6. # Tercer argumento

También si escribe un tercer argumento para la función main (llamémosle env), se mostrarán las variables de entorno.

~ DtxdF


Título: Re: int main (int argc, char* argv[])
Publicado por: K-YreX en 23 Mayo 2021, 21:46 pm
Un programa cuando se ejecuta puede recibir una serie de argumentos.
Esto se suele obviar porque normalmente ejecutamos los programas mediante un doble clic en el .exe.

Imagina que tienes tu programa en C/C++ y lo compilas. Ahora tienes como resultado tu ejecutable: programa.exe.
Para ejecutarlo puedes buscarlo y hacer doble clic o puedes acceder a la ruta mediante la Consola (cmd/Powershell de Windows) o Terminal (de Linux) mediante:
Código:
cd ruta_a_tu_ejecutable
Y ahora ejecutar el programa con o sin argumentos:
Código:
./programa.exe
./programa.exe cada palabra extra es un argumento
En el segundo caso "cada palabra extra es un argumento" son los argumentos que recibe el programa.
Para manejar estos argumentos en el propio programa están argc y argv:
- argc contiene el número de argumentos recibidos. Siempre es >= 1.
- argv es un array de char[] donde cada uno es una de las palabras
Código:
argc = 7
argv[0] = "./programa.exe"
argv[1] = "cada"
argv[2] = "palabra"
...
argv[6] = "argumento"


Título: Re: int main (int argc, char* argv[])
Publicado por: Locura_23 en 23 Mayo 2021, 22:50 pm
Entiendo, muchas gracias por sus respuestas.