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

 

 


Tema destacado: Tutorial básico de Quickjs


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Pasar tipo const char* a char
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Pasar tipo const char* a char  (Leído 11,483 veces)
jorge_hura

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Pasar tipo const char* a char
« en: 24 Julio 2013, 13:14 pm »

Hola buenas, soy principiante con esto de la programacion. En mi proyecto recibo una informacion a traves de un socket, esta se guarda en un espacio que he llamado recvBuff[512] (declarado como global). por el socket debe llegarme un caracter que luego tengo que comprobar de un array en que posicion del array esta. Mi problema es que al usar un stcmp dentro de un for para saber la posicion del arrray no me deja porque uno es char y el otro const char*. Hay alguna forma de transformar de un tipo al otro?? gracias. adjunto el codigo

pd: programando en C

Código:
#ifndef _WINDOWS_
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#undef WIN32_LEAN_AND_MEAN
#endif
#pragma comment( lib, "ws2_32.lib" )
#include <WinSock2.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Ws2tcpip.h>

char comodin[512];
char SendBuff[512];
char RecvBuff[512];

char s2[512]= " ";

char tiempoCaracteres[]={"0123456789abcdefghijklmnopqrstuvwxyz,.;:+-*/!%&/()=?¿¡-}<>[]\n"};


int main(int argc, char *argv[]){
 
  WSADATA wsaData;
  SOCKET conn_socket;
  struct sockaddr_in server;
  struct hostent *hp;
  int resp,numero,p;
  char comodin,comodin2;
  int ClaseComando=0;
  char c;
  char comodin,comodin2;
  do{
  //Inicializamos la DLL de sockets
  resp=WSAStartup(MAKEWORD(1,0),&wsaData);
  if(resp){
    printf("Error al inicializar socket\n");
    getchar();return -1;
  }

  //Obtenemos la IP del servidor... en este caso
  // localhost indica nuestra propia máquina...
  hp=(struct hostent *)gethostbyname("192.168.0.5");

  if(!hp){
    printf("No se ha encontrado servidor...\n");
    getchar();WSACleanup();return WSAGetLastError();
  }

  // Creamos el socket...
  conn_socket=socket(AF_INET,SOCK_STREAM, 0);
  if(conn_socket==INVALID_SOCKET) {
    printf("Error al crear socket\n");
    getchar();WSACleanup();return WSAGetLastError();
  }
   
  memset(&server, 0, sizeof(server)) ;
  memcpy(&server.sin_addr, hp->h_addr, hp->h_length);
  server.sin_family = hp->h_addrtype;
  server.sin_port = htons(60);

  // Nos conectamos con el servidor...
  if(connect(conn_socket,(struct sockaddr *)&server,sizeof(server))==SOCKET_ERROR){
    printf("Fallo al conectarse con el servidor\n");
    closesocket(conn_socket);
    WSACleanup();getchar();return WSAGetLastError();
  }
  printf("Conexion establecida con: %s\n", inet_ntoa(server.sin_addr));
 
 
  //do{
printf("Escribe lo que deseas enviar(acabado en '.'):");
fflush (stdin);
gets(SendBuff);

  //Enviamos y recibimos datos... 
  printf("Datos enviados: %s \n", SendBuff);
  send(conn_socket,SendBuff,sizeof(SendBuff),0);
 
 
  //printf("Recibiendo Mensaje... \n");
  fflush (stdin);
  strcpy( RecvBuff, s2 );
  recv(conn_socket,RecvBuff, sizeof(RecvBuff), 0);
  printf("Datos recibidos: %s \n", RecvBuff);
 
 
 
  for(p=0 ; p<61 ; p++)
{

comodin=tiempoCaracteres[p];

if(strcmp(RecvBuff,comodin)==0)
{
numero = p;
printf("el numero del caracter es: %d", numero);
}

  }
   fflush (stdin);
  printf( "primero pulsa s para seguir enviando, despues escribe el comando deseado." );
  }while ( ( c = getchar() ) == 's'); 
 
  // Cerramos el socket y liberamos la DLL de sockets
  closesocket(conn_socket);
  WSACleanup();
  return EXIT_SUCCESS;
}


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Pasar tipo const char* a char
« Respuesta #1 en: 24 Julio 2013, 13:21 pm »

strcmp lo que hace es comparar dos cadenas de caracteres y devolver un resultado que te indica si son iguales o no.

Tu, obviamente, no quieres eso.

Tu estás comparando char contra char... este chequeo es tan sencillo como:

Código
  1. for(p=0 ; p<61 ; p++)
  2. {
  3. comodin=tiempoCaracteres[p];
  4. if( comodin == recvBuff[ 0 ] )
  5. {
  6. numero = p;
  7. printf("el numero del caracter es: %d", numero);
  8. }
  9. }

Obviamente esto es asumiendo que el caracter a localizar sea el primero de los recibidos por el servidor.


En línea

jorge_hura

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Pasar tipo const char* a char
« Respuesta #2 en: 24 Julio 2013, 13:35 pm »

Toda la razon no me habia dado cuenta, no lo puedo probar aun pero creo que me servira.

gracias eferion
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Pasar tipo const char* a char
« Respuesta #3 en: 24 Julio 2013, 15:22 pm »

Tu estás comparando char contra char... este chequeo es tan sencillo como:

Código
  1. for(p=0 ; p<61 ; p++)
  2. {
  3. comodin=tiempoCaracteres[p];
  4. if( comodin == recvBuff[ 0 ] )
  5. {
  6. numero = p;
  7. printf("el numero del caracter es: %d", numero);
  8. }
  9. }
Me parece mejor este otro método para comparar cadenas:

Código
  1.  
  2. int Diferencia = 0;
  3. int p;
  4. int Tamanyo_Cadena = strlen(Cadena1);
  5.  
  6. if (Tamanyo_Cadena != strlen(Cadena2) {} // Las cadenas no son iguales
  7.  
  8. else
  9. {
  10.  for(p=0 ; p < Tamanyo_Cadena; p++)
  11.  {
  12. Diferencia += Cadena1-Cadena2;
  13.  }
  14.  
  15.  if (Diferencia){} // Las cadenas no son iguales
  16.  else{} // Las cadenas son iguales
  17. }
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Pasar tipo const char* a char
« Respuesta #4 en: 24 Julio 2013, 15:23 pm »

... No se trata de comparar cadenas... sino de localizar un caracter en un vector
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Pasar tipo const char* a char
« Respuesta #5 en: 24 Julio 2013, 15:46 pm »

... No se trata de comparar cadenas... sino de localizar un caracter en un vector
Huy, como había leído algo de strcmp y de comparar cadenas  :silbar:
En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Pasar tipo const char* a char
« Respuesta #6 en: 24 Julio 2013, 16:06 pm »

Ya, a mi al principio me pasó lo mismo... tuve que leerlo tranquilamente un par de veces para verlo claro jejeje
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Pasar tipo const char* a char
« Respuesta #7 en: 24 Julio 2013, 17:45 pm »

Este bucle:
Código
  1. for (p = 0; p < 61; p++){
  2.   comodin = tiempoCaracteres[p];
  3.  
  4.   if (strcmp(RecvBuff,comodin) == 0){
  5.      numero = p;
  6.      printf("el numero del caracter es: %d", numero);
  7.   }
  8. }
Supongo tiene la intención de buscar cada uno de los caracteres de la cadena "tiempoCaracteres" en "RecvBuff" indicando el resultado.

Ello podría realizarse con strchr (prototipo en <string.h>) o un simple bucle pero hay problemas: para empezar no se trata de una cadena sino de una secuencia de bytes  y el numero de estos es el valor de retorno de la función recv.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Pasar tipo const char* a char
« Respuesta #8 en: 24 Julio 2013, 17:56 pm »

Ello podría realizarse con strchr (prototipo en <string.h>) o un simple bucle pero hay problemas: para empezar no se trata de una cadena sino de una secuencia de bytes  y el numero de estos es el valor de retorno de la función recv.

Efectivamente, lo que se envía por un socket es un vector de bytes... sin embargo, si ese vector de bytes se ha compuesto a partir de una cadena de caracteres... la conversión es directa y no da problemas.

Es decir, si yo envío "Hola", la cadena es 'H', 'O', 'L', 'A', '\0' y el vector de bytes tendrá exactamente la misma información. Si yo cojo ese vector de bytes y se lo enchufo a cout como un array de caracteres en la consola me va a imprimir "Hola"
En línea

BlackZeroX
Wiki

Desconectado Desconectado

Mensajes: 3.158


I'Love...!¡.


Ver Perfil WWW
Re: Pasar tipo const char* a char
« Respuesta #9 en: 24 Julio 2013, 21:05 pm »

... No se trata de comparar cadenas... sino de localizar un caracter en un vector

¿Un caracter? strchr()

Dulces Lunas!¡.
En línea

The Dark Shadow is my passion.
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

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