Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: sabeeee en 2 Enero 2015, 04:07 AM

Título: [Solucionado] Parametros desde consola
Publicado por: sabeeee en 2 Enero 2015, 04:07 AM
Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
int main()
{

char clave[6];
printf("Escriba su clave: ");
scanf("%s",clave);
if(strcmp(clave,"passbasico")==0)
{
system("echo sencillo a ejecutar");
printf("\n");
}
else
{
printf("Clave no valida");
}

return 0;
}


Hola soy nuevo en C y quisiera hacer algo así pero que en vez de que sea desde el mismo programa se pueda poner un parámetro externo "-pass passbasico" desde una consola por ejemplo.
Título: Re: [Ayuda] Parametros desde consola
Publicado por: engel lex en 2 Enero 2015, 04:18 AM
Código (cpp) [Seleccionar]
int main(int argc, char** argv)

El argc contiene la cantidad de argumentos pasados,  argv contiene un array  de lo pasado siendo 0 el archivo en si mismo y el resto lo que fue pasado con espacios
Título: Re: [Ayuda] Parametros desde consola
Publicado por: Yoel Alejandro en 2 Enero 2015, 15:30 PM
Ya va no entiendo bien, quieres que el "parámetro externo" sea el password que introduce el usuario, o sea el password correcto o consigna con el cual debe cotejarse el que introduzca el usuario.

Si es lo segundo, (intuyo que quieres llamar a este programa desde otro programa, que le indique cuál es la clave correcta a considerar) quedaría como:
Código (cpp) [Seleccionar]

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

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

   char clave[21];             /* espacio para 20 caracteres, pues 5 es muy poco */
   char clave2[21]; /* clave del usuario */
   if ( argc < 3 ) { /* salir si hay menos de tres argumentos */
      printf("faltan argumentos\n");
      return 1;
   }

   if ( !strcmp( argv[1], "-pass" ) ) {
      strncpy( clave, argv[2], 20 );
      clave[21] = '\0';
   }
   else
      return 1;

   printf("Escriba su clave: ");
   scanf("%s", clave2);
   while ( getchar() != '\n' ) ;

   if ( !strcmp(clave, clave2) ) /* <-- ve aqui */
   {
      printf("sencillo a ejecutar\n");
   }
   else
   {
      printf("Clave no valida\n");
   }

   return 0;
}


Con te explicó engel, la declaración
Código (cpp) [Seleccionar]

int main(int argc, char** argv)

se usa para leer argumentos de main por consola. El primer argumento argc corresponde al número de argumentos leidos, en este caso 3. Pues el propio nombre de tu programa se considera como un argumento. El segundo argv es un arreglo de cadenas, donde cada cadena corresponde a uno de los argumentos pasados al programa. Ejemplo:

myprograma -pass xyz

entonces, argc vale 3, y los elementos del array argv serán:

en argv[0], la cadena "my programa"
en argv[1], la cadena "-pass"
en argv[2], la cadena "xyz"


Ya con esta explicación creo que se entiende el resto del código fuente que te suministré. Al compilar y probarlo verás:

./test -pass xyz
Escriba su clave: xyz
sencillo a ejecutar

pues, se pide cotejar con la clave "xyz". Si introduce una clave distinta a la esperada:

./test -pass xyz
Escriba su clave: abc
Clave no valida


Pequeñas observaciones:

Título: Re: [Ayuda] Parametros desde consola
Publicado por: sabeeee en 2 Enero 2015, 20:10 PM
Excelente entonces, eliminaría el scanf y seria:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

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

   char clave[21];             /* espacio para 20 caracteres, pues 5 es muy poco */
   char clave2[21] = "hola"; /* clave del usuario */
   if ( argc < 3 ) { /* salir si hay menos de tres argumentos */
      printf("USO: programa -pass \"clave\" \n");
      return 1;
   }

   if ( !strcmp( argv[1], "-pass" ) ) {
      strncpy( clave, argv[2], 20 );
      clave[21] = '\0';
   }
   else
      return 1;

   if ( !strcmp(clave, clave2) )
   {
      printf("sencillo a ejecutar\n");
   }
   else
   {
      printf("Clave no valida\n");
   }

   return 0;
}
Título: Re: [Ayuda] Parametros desde consola
Publicado por: Yoel Alejandro en 2 Enero 2015, 23:43 PM
Excelente !!!  ;D
Título: Re: [Solucionado] Parametros desde consola
Publicado por: sabeeee en 3 Enero 2015, 03:39 AM
Muchas gracias a ambos, recomendaría agregar esto a la lista de ejemplos, para los novatos como yo es un poco difícil.  ;D
Título: Re: [Solucionado] Parametros desde consola
Publicado por: Yoel Alejandro en 4 Enero 2015, 02:31 AM
 ;-) ;-) ;-) Por nada amigo.

Por cierto, esa sintaxis que definiste "test -pass xyz" con el guión antes de la opción se parece a la típica de los comandos de UNIX y derivados. En Windows creo que es más usual el "/" (o sea "/pass" )

Visto que es así, y por lo visto tienes un alma inquieta y ávida de programación, ¿no has pensado en explorar Linux?
Título: Re: [Solucionado] Parametros desde consola
Publicado por: sabeeee en 5 Enero 2015, 02:20 AM
yoel_alejandro, te comento, yo soy de Argentina, y a los estudiantes de secundaria (creo que en algunos países es universidad), nos regalan netbooks con la condición de que terminemos la escuela, y porque hay gente desafortunada que nunca pudo tener un ordenador (afortunadamente cada vez son menos), lo cual es excelente (cada vez con mejores especificaciones técnicas). Poseen Windows 7 (2015 traen Windows 8 sino me equivoco y 4gb de ram!) y una distro Huayra, basada en Ubuntu (creo) y es por eso y por una cuestión de "portabilidad" de que intento de que todos mis códigos sean compatibles con Linux, del cual yo no entiendo mucho pero me encantaría saber y el VirtualBox no me va, cuando tenga la net lo pruebo, la mande a desbloquear porque incluyen un chip TPM (hay muchos mitos y leyendas urbanas sobre el jajaja), para evitar ser robada, el cual es muy difícil de corromper, en las net nuevas (mi caso) y es verano acá por eso es que estamos de vacaciones, la escuela esta cerrada jajaja, voy por el ultimo añito ya.

Veo que vos sabes mucho de C/C++, venís ayudando a todos, quizás te venga bien un cargo de "Colaborador" por lo menos ja.

Edit esto es lo que te digo:
http://www.taringa.net/posts/info/18186947/La-nueva-net-del-gobierno-2014-2015-con-4gb-de-ram.html

http://ark.intel.com/es/products/79050/Intel-Celeron-Processor-N2806-1M-Cache-up-to-2_00-GHz

https://www.youtube.com/watch?v=QcP-WS8wU20
Título: Re: [Solucionado] Parametros desde consola
Publicado por: Yoel Alejandro en 6 Enero 2015, 18:24 PM
Mmmm, se parece al programa que tiene el gobierno de Venezuela (mi país) con equipos llamados "Canaima", y un SO que dicen propio pero me parece más un clon de Ubuntu y encima sin dar los créditos, ......., en fin así son los políticos.

Sí, trato de ayudar a los que puedo y sería un honor recibir el título de Colaborador, aunque no conozco los requisitos necesarios para ello.

Y aunque no lo parezca, ayudando también se gana, he aprendido mucho respondiendo las preguntas aquí en el foro  :)

Saludos!