[DUDA] añadir espacios al utilizar la función strcat

Iniciado por Dryken, 8 Agosto 2012, 17:23 PM

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

Dryken

Estaba probando hacer un simple automatizador de netcat cuando me ha surgido un problema. Trata de que strcat concatena funciones y te devuelve la función final con la suma de todo, pero quiero que en dicha suma haya 2 espacios.

Quiero pasar de ncIPPuerto ---->    nc IP Puerto

El código que tengo es este.

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <string.h>
#include <windows.h>

int main(){
char puerto[25], ip[25];
char netcat[]="nc";

printf("Introduce la IP:\t");
scanf("%s",&ip);
printf("Introduce el puerto:\t");
scanf("%s",&puerto);
strcat(netcat,ip);
strcat(netcat,puerto);

system(netcat);
while(getchar() !='\n');  
getchar();

}
Lo intentas y fracasas, lo intentas y fracasas pero fracasas realmente cuando dejas de intentarlo.

Calc Don v0.7 - C
http://foro.elhacker.net/programacion_cc/source_calculadora_calc_don_10-t366489.0.html

Hundir la flota v0.3 - C#
http://foro.elhacker.net/net/source_c_juego_hundir_la_flota_v01-t377794.0.html

0xDani

Utiliza la misma funcion strcat() para concatenar nc con un espacio, y lo mismo con la otra cadena.

Saludos.
I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

Dryken

daniyo eso lo probe hace tiempo y no funciono por eso lo preguntaba, no es tan simple como parece.

Tu te refieres a por ejemplo esto...

Citarchar puerto[25], ip[25], espacio[5]=" ";
char netcat[]="nc";

printf("Introduce la IP:\t");
scanf("%s",&ip);
printf("Introduce el puerto:\t");
scanf("%s",&puerto);
strcat(netcat,ip);
strcat(netcat,espacio);
strcat(netcat,puerto);

system(netcat);
while(getchar() !='\n'); 
getchar();

Da problemas al ejecutar. Si coloco tambien espacio[5]=""; , vamos sin el espacio de por medio sigue sin dejar espacio.
Lo intentas y fracasas, lo intentas y fracasas pero fracasas realmente cuando dejas de intentarlo.

Calc Don v0.7 - C
http://foro.elhacker.net/programacion_cc/source_calculadora_calc_don_10-t366489.0.html

Hundir la flota v0.3 - C#
http://foro.elhacker.net/net/source_c_juego_hundir_la_flota_v01-t377794.0.html

0xDani

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM

Dryken

Tampoco va daniyo al colocar espacio[5]=" \t";.

Al colocar /t lo que sucede es que la siguiente función strcat(netcat,puerto); no se muestra por pantalla, aparece con el /t todas las funciones antes que de esta sea utilizada.

queda así

Citarncxxx.xxx.xxx.xxx

Lo intentas y fracasas, lo intentas y fracasas pero fracasas realmente cuando dejas de intentarlo.

Calc Don v0.7 - C
http://foro.elhacker.net/programacion_cc/source_calculadora_calc_don_10-t366489.0.html

Hundir la flota v0.3 - C#
http://foro.elhacker.net/net/source_c_juego_hundir_la_flota_v01-t377794.0.html

durasno

Ahorrate una pregunta, lee el man

do-while

¡Buenas!

De un primer vistazo lo que veo es que el problema puede estar en que la cadena netcat solo tiene 3 posiciones de memoria ({'n','c','\0'}). Prueba a darle mayor dimension y cuentanos.


char netcat[30]="nc"


¡Saludos!
- Doctor, confundo los números y los colores.
- Vaya marrón.
- ¿Marrón? ¡Por el culo te la hinco!

Dryken

durasno hebuscado como me has dicho y he probado la función sprintf. he visto que la ventaja que tiene es que en comparación con strcat permite espacios pero no permite ejecutar funciones del sistema system();

Aquí se puede ver que concatena con espacios y luego imprime por pantalla. No he colocado  system(netcat); porque entonces no funciona. vamos que con esta función estoy con las mismas, tiene un lado positivo y otro negativo. Os he dejado el código para que lo veáis de ejemplo.

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <windows.h>
int main(){
   char puerto[25], ip[25], netcat[80];

   printf("Introduce la IP:\t");
   scanf("%s",&ip);
   printf("Introduce el puerto:\t");
   scanf("%s",&puerto);
   
   sprintf(netcat, "\nnc %s %s\n", ip, puerto);
   puts(netcat); 
   getchar();
}


Por cierto do-while probé a colocar una dimensión mayor pero no funcionó, seguramente será otra cosa.

Pufff...te pones a pensar y te das cuenta que colocar un simple espacio no es tán fácil como parece en strcat y que en sprintf no es posible ejecutar system(); , a ver si consigo hallar la forma en strcat.
Lo intentas y fracasas, lo intentas y fracasas pero fracasas realmente cuando dejas de intentarlo.

Calc Don v0.7 - C
http://foro.elhacker.net/programacion_cc/source_calculadora_calc_don_10-t366489.0.html

Hundir la flota v0.3 - C#
http://foro.elhacker.net/net/source_c_juego_hundir_la_flota_v01-t377794.0.html

Fire544

#8
Hola Dryken: mira todo lo que haces esta bien, tienes que dejar cada char [], con un espacio antes de concatenar, intenta hacer esto.

"nc ", " ip", " puerto".


char vector[]="nc ";
strcat(vector, ip)
strcat(vector, puerto);
system(vector);


Si te fijas en el codigo, todo bien pero algo ilogico, porque a lo mejor lo has intentado, pero fijate cuando termino de inicializar mi vector al declararlo, dejo el ultimo bytes en " ", esto es para concatenar con espacios, ten esto en cuenta y hazlo con char ip[], puerto[], a lo mejor puerto seria int, entonces haces un cast "strcat(vector, (int)puerto);"
"Si enseñas a pezcar a un niño lo ayudas para toda la vida, si pezcas para alimentarlo lo ayudas por un momento".

durasno

Citarno permite ejecutar funciones del sistema system();
nose de donde sacaste eso. Lo unico que hace sprintf es almacenar una cadena, con cierto formato, en un arreglo; en tu caso en netcat

Ejemplo simple:
int main(void)
{
char a[]="dir";
char b[]="Java" //es una carpeta que tengo en el escritorio
char cmd[20];

sprintf(cmd,"%s %s",a,b); // armo el comando a ejecutar

system(cmd); // ejecuto: dir Java
//system("PAUSE");
}


No uso nc ya que la consola no me reconoce el comando como valido(hay q instalarlo?? :S)

Saludos
Ahorrate una pregunta, lee el man