Foros del Web » Programación para mayores de 30 ;) » Programación General »

Cómo validar argumentos de programas en linea de comandos (lenguaje C)

Estas en el tema de Cómo validar argumentos de programas en linea de comandos (lenguaje C) en el foro de Programación General en Foros del Web. Buenas... Estoy iniciándome a C y haciendo un programa en linea de comandos, este programa puede recibir un argumento --help y así mostraría una ayuda ...
  #1 (permalink)  
Antiguo 04/12/2004, 06:00
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
Cómo validar argumentos de programas en linea de comandos (lenguaje C)

Buenas...

Estoy iniciándome a C y haciendo un programa en linea de comandos, este programa puede recibir un argumento --help y así mostraría una ayuda por pantalla.

La cuestión es cómo verificar que ese argumento es --help de una forma sencilla. Hasta ahora he probado con lo siguiente y funciona bien:


Código PHP:
if (*(argv[1]+0) == '-' && *(argv[1]+1) == '-' && *(argv[1]+2) == 'h' && *(argv[1]+3) == 'e' && *(argv[1]+4) == 'l' && *(argv[1]+5) == 'p')) 
La cuestión es si se puede hacer algo más sencillo, o si hay otra forma más "habitual" de hacerlo...

Un saludo
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #2 (permalink)  
Antiguo 04/12/2004, 11:02
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
Lo primero que deberías mirar es el total de parámetros, podría no haber linea de comandos y entonces solo tendrías uno (el nombre del programa) y de haber más de un parámetro el tamaño en bytes del segundo. No tiene sentido hacer comparaciones contra cadenas de mayor o menor tamaño que --help y además no es una buena practica apuntar a cualquier posición que tal vez no exista dentro de la cadena.
Por último yo haría una comparación sin tener en cuenta mayusculas y minusculas con stricmp.

Algo así sería el código:

Código:
 if (argc >= 2)
  {
    if (strlen(argv[1]) == strlen("--help"))
    {
      if (!stricmp(argv[1], "--help"))
      {
        //el primer parametro es help
        printf("ayuda...\r\n");
      }
    }
  }
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 04/12/2004, 12:23
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 2 meses
Puntos: 55
Pues muchas gracias, era lo que buscaba... No venía esa función en los apuntes de C que tengo Por cierto, sólo es una curiosidad, ¿por qué es costumbre escribir los argumentos con guiones delante?
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #4 (permalink)  
Antiguo 04/12/2004, 12:31
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
De nadas, me alegro de que te haya servio y la verdad no tengo ni la menor idea de porque se ponen guiones delante de los argumentos, pero igual en Microsoft usan mucho las barras (/) también, sin ir más lejos pedir la ayuda del compilador de C/C++ con /help y -help es equivalente. Me imagino que es un separador que les iba bien.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:02.