elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Meter en cadena argumento en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Meter en cadena argumento en C  (Leído 2,866 veces)
JoseluCross

Desconectado Desconectado

Mensajes: 33


Conoceréis la Verdad, y la Verdad os hará libres


Ver Perfil WWW
Meter en cadena argumento en C
« en: 28 Marzo 2016, 23:04 pm »

Hola a todos, quiero meter un argumento especificado en la ejecución del programa en una cadena para luego abrir un archivo con ese nombre. Os dejo el código proque como lo he intentado no funciona.
Código:
int main(int argc, char *argv[]) {
  bool    state; //false when encrypt, true when decrypt
  bool    ran = false; //false: not random generation, true: random generation
  bool    fil; //false: not file, true, with file
  int     cant = 0; //number of characters in random generation
  char    text[MAX_TEXT]; //imput character
  char    pass[MAX_PASS]; //Imput pass
  char    in[35]; //input file
  char    out[35]; //output file

  //Flags options
  int     i;
  for(i = 0; i < argc; i++) {
    if(strcmp(argv[i], "-o") == 0) {
      strcpy(out[0], argv[i + 1]);
      i++;
    }
    if(strcmp(argv[i], "-f") == 0) {
      strcpy(in[0], argv[i + 1]);
      fil = true;
      i++;
    }
    if(strcmp(argv[i], "-p") == 0) {
      strcpy(pass[0], argv[i + 1]);
      i++;
    }
    if(strcmp(argv[i], "-t") == 0) {
      strcpy(text[0], argv[i + 1]);
      fil = false;
      i++;
    }
    if(strcmp(argv[i], "-e") == 0) {
      state = false;
      i++;
    }
    if(strcmp(argv[i], "-d") == 0) {
      state = true;
      i++;
    }
    if(strcmp(argv[i], "-r") == 0) {
      ran = true;
      cant = atoi(argv[i + 1]);
      i++;
    }
    if(strcmp(argv[i], "-h") == 0) {
      helpbox(); //In methods.c
      return 0;
    }
  }
Espero que tengáis suficientes, si necesitais mas código está en https://github.com/JoseluCross/cryptoJKA/tree/master/unestable-version
Muchas gracias por adelantado


En línea

No hay problema sin solución, solo personas que no quieren resolverlo.
LaiaxanIV

Desconectado Desconectado

Mensajes: 57


Ver Perfil
Re: Meter en cadena argumento en C
« Respuesta #1 en: 29 Marzo 2016, 00:02 am »

Código:
#include<stdio.h>

int main(int argc, char *argv[]) {
FILE *fp;
char ch;
int i;
for(i = 0; i < argc; ++i){
if(strcmp(argv[i],"-o")== 0){
fp=fopen(argv[i+1],"w");
}
}
char BUFF[] = "He escrito algo en este fichero \n";
fwrite(BUFF, 1, sizeof(BUFF), fp);
fclose(fp);
}

Este codigo lo que hace es crear un fichero con el nombre que le pasas como argumento después del flag -o y escribe en él, el contenido de BUFF. No se si es lo que buscas, si no, no te he entendido bien. :P


En línea

JoseluCross

Desconectado Desconectado

Mensajes: 33


Conoceréis la Verdad, y la Verdad os hará libres


Ver Perfil WWW
Re: Meter en cadena argumento en C
« Respuesta #2 en: 29 Marzo 2016, 00:20 am »

Eso que has puesto me serviría para el archivo de entrada, pero para la salida necesito el nombre porque lo he de enviar a otras funciones, si se puede hacer directamente mejor, pero no soy muy ducho con esto. Tambien necesito texto para pass o text. Gracias tambien por tu ayuda
En línea

No hay problema sin solución, solo personas que no quieren resolverlo.
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Meter en cadena argumento en C
« Respuesta #3 en: 29 Marzo 2016, 00:29 am »

El problema es que haces strcpy con destino a un caracter, no a la dirección de inicio de un array de carácteres. Es decir:
Código
  1. strcpy(out[0], argv[i + 1]);
está mal.
out es el array, out[0] es un carácter (char).
lo que espera strcpy es
Código
  1. strcpy(out, argv[i+1]);
Y así con todos los demás arrays: in, pass y text.
En línea

JoseluCross

Desconectado Desconectado

Mensajes: 33


Conoceréis la Verdad, y la Verdad os hará libres


Ver Perfil WWW
Re: Meter en cadena argumento en C
« Respuesta #4 en: 29 Marzo 2016, 00:47 am »

Aunque ahora ya no tengo problemas con los tipos tengo violación del segmento del core generado ¿Por que puede ser esto?
En línea

No hay problema sin solución, solo personas que no quieren resolverlo.
LaiaxanIV

Desconectado Desconectado

Mensajes: 57


Ver Perfil
Re: Meter en cadena argumento en C
« Respuesta #5 en: 29 Marzo 2016, 07:41 am »

Seguramente sea producido por el i++ que hay dentro de los if(). Quitalo y pon else if(). Deberia solucionarte el problema.
Conseguiste ya lo de los ficheros?
En línea

JoseluCross

Desconectado Desconectado

Mensajes: 33


Conoceréis la Verdad, y la Verdad os hará libres


Ver Perfil WWW
Re: Meter en cadena argumento en C
« Respuesta #6 en: 29 Marzo 2016, 08:14 am »

Los ficheros ya los coje y los escribe, cambiando lo del i++ por el else if ya no da error en el core, ahora solo tengo problemas respecto a que falte un flag y tanto la entrada como la salida sean incorrectos, y me pasa que no funciona el resto del programa pero ya algo se va solucionando. Muchas gracias nuevamente por toda la ayuda
« Última modificación: 29 Marzo 2016, 08:27 am por JoseluCross » En línea

No hay problema sin solución, solo personas que no quieren resolverlo.
LaiaxanIV

Desconectado Desconectado

Mensajes: 57


Ver Perfil
Re: Meter en cadena argumento en C
« Respuesta #7 en: 29 Marzo 2016, 09:25 am »

De nada, para cualquier otra duda ya sabes!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines