Páginas: [1]
|
 |
|
Autor
|
Tema: Funcion char left(char,int); (Leído 465 veces)
|
WHK
Desconectado
Mensajes: 835
+-=[Yan]=-+
|
Hola, creo que con el titulo se nota lo que necesito, algo similar al left de vb6 donde debuelve los primeros x caracteres del buffer, lo necesito para filtrar argumentos ya que con strcmp confunde el argumento -v con -ver, se que se puede de otra forma pero no les voy a explicar porque ya que escribo desde el celular y me duele el dedo (del medio xd)
|
|
|
|
|
En línea
|
|
|
|
Ferсhu
Desconectado
Mensajes: 1.221
Menos palabras y Mas codigos.
|
void left(char **cadena,int n){
*cadena[n]=0; // indica q ahi termino la cadena
}
void rigth(char **cadena,int n){
tam=strlen(*cadena); *cadena=(char *)(*cadena+tam-n);
}
Tenes q pasar la direccion del puntero de la cadena original ej leftf(&cadena,10); Lo hace sobre la misma cadena, si keres usar otra vas a tener q usar una cadena auxiliar. No lo probe :p
|
|
|
|
« Última modificación: 26 Mayo 2008, 01:40 por Ferсhu »
|
En línea
|
|
|
|
®®
Colaborador
Conectado
Mensajes: 5.268
|
ya que con strcmp confunde el argumento -v con -ver pon el codigo.
|
|
|
|
|
En línea
|
|
|
|
WHK
Desconectado
Mensajes: 835
+-=[Yan]=-+
|
ya, me conseguí el pc de mi tio unos segundos para colgar mi código todo mal hecho mientras trato de aprender mas XD... ahi va, después por el fon veo las sugerencias :p http://512.iespana.es/mt.htmlla idea es que quiero evitar problemas al ejecutar mt.exe -v y mt.exe -ver entre otros ya que quiero primero separar argumentos cada uno de los que comienzen con el caracter "-" y buscar valor con una función que hice llamada eregi al igual que en php y ahorrar código buscando desde los argumentos mas largos hasta los de un caracter pero para eso necesito diferenciar cual es el primer caracter de cada argumento y para eso necesito el left. vi como estaba diseñado el netcat pero no me gustó que utilizara cientos de lineas para hacer algo tan simple. gracias de antemano por la ayuda  pd: cuidado con el plagio  Adew y grax...
|
|
|
|
|
En línea
|
|
|
|
WHK
Desconectado
Mensajes: 835
+-=[Yan]=-+
|
Juaz, pensaba que me iban a dar una mano, se que no es algo bien hecho pero necesitaba una orientación.
|
|
|
|
|
En línea
|
|
|
|
E0N
Lab &
Colaborador
Desconectado
Mensajes: 2.686
http://e0n-productions.blogspot.com/
|
Left: std::string s1("Hola"); std::string s2(s1.substr(0,2); // s2 = "Ho"
Supongo q eso te servirá Salu2 
|
|
|
|
|
En línea
|
|
|
|
Leber
Desconectado
Mensajes: 261
"Las estrellas se apagan..."
|
Quiza esto te sirva, no es una joya, pero creo que cumple con su funcion. Lo hice en un ratito que me aburri y vi tu post, toma, ya me diras: char *return_char(char *cadena, int num_char) {
char *aux; int i=0;
while(i++ < num_char) *aux++=*cadena++; //Copiamos los ncaracteres que queramos
*aux='\0';
while(num_char-- > 0) *--aux; //decrementamos el puntero al principio de la cadena
return aux; //devolvemos los caracteres
}
|
|
|
|
|
En línea
|
"Solo los tontos carecen de preucupaciones." Johann Wolfgang Goethe
|
|
|
WHK
Desconectado
Mensajes: 835
+-=[Yan]=-+
|
Gracias, ya me orienté mejor y terminé creando otra función: int eregi_argum(char *Argumento_Necesitado, char *Argumentos[]){ if(Argumento_Necesitado and Argumentos){ for(int Cuenta = 1;true; Cuenta++){ /* Inicia desde el 1 para no procesar el argv[0] */ if(!Argumentos[Cuenta]){ break; /* Si no hay mas argumentos se detiene para arrojar el resultado */ }else if(!strncmp(Argumentos[Cuenta],Argumento_Necesitado,strlen(Argumento_Necesitado))){ return 1; // El argumento existe. } } return 0; // No hay argumentos válidos. }else{ return 0; // No se acerptan argumentos nulos / vacios. } } char *valor_argum(char *Argumento_Necesitado, char *Argumentos[], int N_Valor){ if(Argumento_Necesitado and Argumentos){ for(int Cuenta = 1;true; Cuenta++){ /* Inicia desde el 1 para no procesar el argv[0] */ if(!Argumentos[Cuenta]){ break; /* Si no hay mas argumentos se detiene para arrojar el resultado */ }else if( !strncmp(Argumentos[Cuenta],Argumento_Necesitado,strlen(Argumento_Necesitado)) and Argumentos[Cuenta + N_Valor] and strncmp(Argumentos[Cuenta + N_Valor],"-",1) ){ return Argumentos[Cuenta + N_Valor]; // Debuelve el argumento. } } return 0; // No hay argumentos válidos. }else{ return 0; // No se acerptan argumentos nulos / vacios. } }y en main: int main(int argc, char *argv[]){ int Retorno; int Cuenta; /* -p [Segundos] ------------------------------------------------------------ */ sleep(atoi(valor_argum("-p",argv,1)) * 1000); /* Crea una pausa de N segundos */ /* -n [N veces] ------------------------------------------------------------- */ Cuenta = (atoi(valor_argum("-n",argv,1)) - 1); /* Cuenta N loops */ if(Cuenta <= 0){Cuenta = 0;} /* Evita negativos */ /* -------------------------------------------------------------------------- */ Inicio: /* Loop para el argumento -n */ /* -e [Comando] ------------------------------------------------------------- */ if(valor_argum("-e",argv,1)){ Retorno = system(valor_argum("-e",argv,1)); if(eregi_argum("-per",argv)){goto Inicio;}if(Cuenta){Cuenta--;goto Inicio;} return Retorno; /* -d [URL] [-s Salida] [-a Agente] ---------------------------------------- */ }else if(valor_argum("-d",argv,1)){ Retorno = descargar_url(valor_argum("-d",argv,1),valor_argum("-s",argv,1),valor_argum("-a",argv,1),eregi_argum("-v",argv)); if(eregi_argum("-per",argv)){goto Inicio;}if(Cuenta){Cuenta--;goto Inicio;} return Retorno; /* -l [Puerto] [Ejecutable] ------------------------------------------------- */ }else if(valor_argum("-l",argv,1)){ Retorno = winsock_escucha(atoi(valor_argum("-l",argv,1)),valor_argum("-l",argv,2),eregi_argum("-v",argv)); if(eregi_argum("-per",argv)){goto Inicio;}if(Cuenta){Cuenta--;goto Inicio;} return Retorno; /* -i [Dirección IP] [puerto] [Ejecutable] ---------------------------------- */ }else if(valor_argum("-i",argv,1) and valor_argum("-i",argv,2)){ Retorno = winsock_inversa(valor_argum("-i",argv,1), atoi(valor_argum("-i",argv,2)), valor_argum("-i",argv,3),eregi_argum("-v",argv)); if(eregi_argum("-per",argv)){goto Inicio;}if(Cuenta){Cuenta--;goto Inicio;} return Retorno; /* -h [-v] ------------------------------------------------------------------ */ }else if(eregi_argum("-h",argv)){ int Modo; if(eregi_argum("-v",argv)){Modo=1;}else{Modo=2;} Retorno = ayuda(Modo); if(eregi_argum("-per",argv)){goto Inicio;}if(Cuenta){Cuenta--;goto Inicio;} return Retorno; /* Finalizar proceso -------------------------------------------------------- */ }else{ return ayuda(0); /* No hay argumentos válidos, detiene persistencia */ } } claro que el goto lo debo reemplazar por un for, pero es provisorio para ver como quedaba. pd: el de EON se veía buena idea pero me faltaba una librería a cargar que no sabía cual era porque el compilador solo me arrojaba que no estaban definidas las funciones.
|
|
|
|
« Última modificación: 01 Junio 2008, 03:31 por WHK »
|
En línea
|
|
|
|
E0N
Lab &
Colaborador
Desconectado
Mensajes: 2.686
http://e0n-productions.blogspot.com/
|
pd: el de E0N se veía buena idea pero me faltaba una librería a cargar que no sabía cual era porque el compilador solo me arrojaba que no estaban definidas las funciones. string.h 
|
|
|
|
|
En línea
|
|
|
|
|
Páginas: [1]
|
|
|
|