¿Qué significan aquellos parámetros de la lista de argumentos del main ?

Iniciado por theluigy13etv, 12 Febrero 2012, 05:23 AM

0 Miembros y 1 Visitante están viendo este tema.

theluigy13etv

Últimamente he visto que en varios códigos en vez de simplemente hacer:

int main(){
  return 0;
}


hacen:
Citarint main(int argc, char *argv[]) {

Quisiera saber el motivo!! Muchas gracias

BlackZeroX

#1
Se usan para retornar el numero de argumentos que se le pasaron en ejecucion a tu programa (argc) que se retornan en *argv[], si no mal recuerdo el primer elemento es la ruta del exe.


int main(int argc, char *argv[])
{
    int i = 0;
    for (i = 0;argc > i; i++)
        fprintf(stdout, "%s\n", argv[i]);
    return EXIT_SUCCESS;
}


Dulces Lunas!¡.
The Dark Shadow is my passion.


rir3760

Extendiendo la explicación que ya te han dado.

* argv[0] usualmente es el nombre de la aplicación pero hay la posibilidad de que sea NULL.

* argv[ i ] es el argumento "i" con este objeto en el rango 0 .. argc - 1

* argv[argc] siempre es NULL.

En base a ello puedes procesar los argumentos mediante un bucle utilizando un contador (lo usual) o un puntero. Por ejemplo (siguiendo el estándar C90):
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int i;
  char **p;
 
  puts("Lista de argumentos (1):");
  for (i = 0; i <= argc; i++)
     printf(
        "argv[%d] == \"%s\"\n",
        i,
        argv[i] != NULL ? argv[i] : "NULL"
     );
 
  puts("----");
 
  puts("Lista de argumentos (2):");
  for (p = argv; p <= argv + argc; p++)
     printf(
        "argv[%ld] == \"%s\"\n",
        (long int) (p - argv),
        *p != NULL ? *p : "NULL"
     );
 
  return EXIT_SUCCESS;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language