Ver Mensaje Individual
  #5 (permalink)  
Antiguo 12/03/2013, 16:01
Macas
 
Fecha de Ingreso: noviembre-2012
Mensajes: 136
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Dividir 2 cadenas en 1

Cita:
Iniciado por sam90 Ver Mensaje
Pasanos el codigo completo. Es seguro que el error lo tienes en otro lado....
Aqui lo tienes:

La parte del Cliente te pongo todo el while a ver si es por otra cosa, pero la parte que estoy haciendo ahora es el case 3.
Código C:
Ver original
  1. while(opcio!=7){
  2.     printa_menu();
  3.     // Obtenim la opcio introduida per l'usuari
  4.     scanf("%d",&opcio);
  5.     printf("\n\n");
  6.     bzero(buffer, sizeof(buffer));            
  7.  
  8.     switch(opcio){
  9.                 fflush(stdout);
  10.                 // Opció HELLORQ OK!!
  11.         case 0: stshort(1,buffer); //Posem el codi de operacio al buffer
  12.                 sendto(sockClient, buffer, tamany_tshort, 0, (struct sockaddr*)&server, sizeof(struct sockaddr_in));
  13.                 bytes_rebuts= recvfrom(sockClient, buffer, sizeof(buffer), 0, (struct sockaddr*)&client, &client_t);
  14.                 printf("%d\n",bytes_rebuts );
  15.                 printf("%s\n", buffer+tamany_tshort); //Printem per patalla ell hello world
  16.                 bzero(buffer, sizeof(buffer));
  17.                 break;
  18.  
  19.                 //Opcio LlistRQ mostrem la llista dels bookmarks OK!!
  20.         case 1: stshort(3,buffer); //Posem el codi de operacio al buffer
  21.                 sendto(sockClient, buffer, tamany_tshort, 0, (struct sockaddr*)&server, sizeof(struct sockaddr_in));
  22.                 bzero(buffer, sizeof(buffer));
  23.                 bytes_rebuts= recvfrom(sockClient, buffer, sizeof(buffer), 0, (struct sockaddr*)&client, &client_t);
  24.                 printMarkTableFromAnArrayOfBytes(buffer+tamany_tshort, bytes_rebuts); //Funcio per printar els bookmarks, fem +tamany_buffer per eliminar el codi de operacio
  25.                 bzero(buffer, sizeof(buffer));
  26.                 break;
  27.  
  28.                 //Introduim una marca per teclat i ens retorna la URL asociada OKK
  29.         case 2: stshort(6, buffer);
  30.                 printf("\nIntrodueix la marca que vols consultar: \n");
  31.                 scanf("%s",&marca_consulta);
  32.                 tamany_buffer=strlen(marca_consulta);
  33.                 strcpy(buffer+tamany_tshort,marca_consulta);
  34.                 tamany_buffer=tamany_buffer+tamany_tshort;
  35.                 sendto(sockClient, buffer, tamany_buffer, 0, (struct sockaddr*)&server, sizeof(struct sockaddr_in));
  36.                 bytes_rebuts= recvfrom(sockClient, buffer, sizeof(buffer), 0, (struct sockaddr*)&client, &client_t);
  37.      
  38.                 if(ldshort(buffer)!=12)
  39.                 {
  40.                     printf("\nLa URL de la marca consultada es: %s",buffer+tamany_tshort);
  41.                    
  42.                 }
  43.                 else
  44.                 {
  45.                    
  46.                     printf("\n %s",buffer+tamany_tshort);  
  47.                 }
  48.                 bzero(buffer, sizeof(buffer));
  49.                 break;
  50.  
  51.         case 3: //Afegir una nova entrada a la taula
  52.                 stshort(5, buffer);
  53.                 printf("\nIntrodueix la nova marca que vols afegir: \n");
  54.                 scanf("%s",&afegir_marca); 
  55.                 strcpy(afegir_marca+strlen(afegir_marca)," ");
  56.                 t_afegir_marca=strlen(afegir_marca);
  57.            
  58.                 printf("\nIntrodueix la URL de la marca que vols afegir: \n");
  59.                 scanf("%s",&afegir_URL);
  60.                
  61.                 t_afegir_URL=strlen(afegir_URL);
  62.                 tamany_buffer=tamany_tshort+t_afegir_URL+t_afegir_marca;
  63.                 strcat(afegir_marca,afegir_URL);
  64.                 strcpy(buffer+2,afegir_marca);
  65.                 sendto(sockClient, buffer, tamany_buffer, 0, (struct sockaddr*)&server, sizeof(struct sockaddr_in));
  66.                 printf("%s\n",buffer+tamany_tshort );
  67.                 break;
  68.  
  69.                 }
  70.  
  71.   } //end while(opcio)

Esta es la parte del servidor donde llamo a la funcion para separar las cadenas, te pongo todo el while pero es el case 5:
Código C:
Ver original
  1. //La funcion para separar las cadenas
  2. void afegirMarca(char *buffer, struct _markTable* taula_de_Marques)
  3. {
  4.  
  5. char *URL;
  6. char *marca;
  7. char *buf_aux;
  8.  
  9. int longitud=strlen(buffer);
  10. printf("La longitud del buffer es: %d", longitud);
  11.  
  12. printf("%s", buffer);
  13. strcpy(buf_aux,buffer);
  14.  
  15. marca=strtok(buffer," ");
  16. URL=strtok(NULL," ");
  17.  
  18. printf("\nLa marca es: %s\n",marca);
  19.  
  20. printf("\nLa URL es: %s\n",URL);
  21.    
  22. }
  23.  
  24.  while(1)
  25.   {      
  26.           //bzero (buffer, sizeof(buffer));
  27.          
  28.           bytes_rebuts = recvfrom(sockServer, buffer,sizeof(buffer),0, (struct sockaddr*)&server, &server_t);
  29.          
  30.           if (bytes_rebuts== -1)
  31.           {
  32.              printf("Error al rebre dades, bytes rebuts= %d\n\n", bytes_rebuts);
  33.           }
  34.  
  35.          
  36.         switch(ldshort(buffer))
  37.         {
  38.          //Enviem el hello world OK!!!!!!!!!!
  39.           case 1:     bzero(buffer, sizeof(buffer));
  40.                       stshort(2,buffer);
  41.                       strcpy(buffer+t_short,"HELLO WORLD");
  42.                       tamany_buffer=t_short+strlen(buffer+1);
  43.                       sendto(sockServer, buffer, tamany_buffer, 0, (struct sockaddr*)&server, sizeof(struct sockaddr_in));
  44.                       bzero (buffer, sizeof(buffer));
  45.                       break;
  46.  
  47.                       //Enviem la taula de marques OK!!!!!!
  48.           case 3:       bzero(buffer, sizeof(buffer)); //Buidem el buffer
  49.                       stshort(4,buffer); //Posem el codi de operacio al buffer
  50.                       memcpy(buffer+t_short,markTable_to_byteArray,tamany_markTable); //Copiem al buffer, la taula de marques indicant el seu tamany
  51.                       sendto(sockServer, buffer, tamany_markTable, 0, (struct sockaddr*)&server, sizeof(struct sockaddr_in));
  52.                       bzero (buffer, sizeof(buffer));
  53.                       break;
  54.  
  55.                       //Afegir una nova entrada a la taula
  56.           case 5:    
  57.                       printf("Antes de la funcion= %s\n", buffer+2)
  58.                       afegirMarca(buffer+2,markTable);
  59.                    
  60.                      // printf("Despues de la funcion= %s", buffer+2);
  61.  
  62.                       bzero(buffer, sizeof(buffer));
  63.                       break;
  64.  
  65.                       //Consulta d'una marca OK!!!
  66.           case 6:   URL_consultada = consultarMarca(buffer+2,markTable);//Cridem a la funcio per buscar la URL asosciada a la marca
  67.                       if(!strcmp(URL_consultada,"Error marca no trobada"))//En cas de no trobar la marca posearem un codi o un altre
  68.                       {
  69.                         stshort(12,buffer);
  70.                      
  71.                       }
  72.                       else
  73.                       {
  74.                         stshort(7,buffer);
  75.                      
  76.                       }
  77.  
  78.                     tamany_buffer=t_short+strlen(URL_consultada); //Mesurem el nou tamany de buffer
  79.                     strcpy(buffer+t_short,URL_consultada);
  80.                     sendto(sockServer, buffer, tamany_buffer, 0, (struct sockaddr*)&server, sizeof(struct sockaddr_in)); //Enviem la URL mes el codi d'operacio
  81.                     bzero (buffer, sizeof(buffer));
  82.                     break;
  83.  
  84.         }

Haber si entre los 2 encontramos una solucion, gracias