collapse

* Posts Recentes

+ LASERs por dropes
[Ontem às 19:35]


Cerca eléctrica por SerraCabo
[14 de Junho de 2025, 23:26]


Alguém arranja motores? por almamater
[10 de Junho de 2025, 22:34]


Condensador 4.7uF 0603 por brunus
[09 de Junho de 2025, 15:52]


Lenovo IdeaPad 3 Não liga por jm_araujo
[07 de Maio de 2025, 19:10]


Identificar Diodo Zenner por filjoa
[01 de Maio de 2025, 23:07]


Meu novo robô por dropes
[18 de Março de 2025, 14:51]


JBL partybox On-The-Go por almamater
[21 de Fevereiro de 2025, 23:32]


Talking Reverse Engineering with an Absolute Legend! por SerraCabo
[13 de Fevereiro de 2025, 09:56]


Motoserra Stihl 120C por brunus
[11 de Fevereiro de 2025, 16:29]

Autor Tópico: Dividir String em variaveis  (Lida 18127 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

StarRider

  • Visitante
Re: Dividir String em variaveis
« Responder #15 em: 22 de Abril de 2015, 19:24 »
Boas starrider,
consegues ajudar mais com um exemplo? nao wstou a conseguir por em pratica.

obrigado

Boas,

O meu exemplo era mais um pseudocódigo do que algo com um propósito funcional,
mas de qualquer forma vou alterar, mas tem em atenção que código genérico e que
não estou a testar.

Código: [Seleccione]
#include <string.h>

// Estou a assumir que vais passar parâmetros numéricos tal como
// no exemplo: "var1=01&var2=02&var3=03"
// Não estou a testar compilar isto, por isso se der erro posta as mensagens de erro

// PS: este código é para C99 ( ISO/IEC 9899:1999)

// comprimento máximo dos nomes das variáveis
#define VAR_NAME_LEN 20

// comprimento máximo dos parâmetros string
#define PAR_STR_LEN 20

// tens que definir as variáveis "var" antes, podes usar um valor por defeito
// para inicializar as mesmas
int var1=0;
int var2=0;
int var3=0;
int var4=0;
char varstr1[PAR_STR_LEN+1];
 /* etc */

void processar_par(char *par)
{
   char varname[VAR_NAME_LEN+1];
   int x=0;

   while (par[x] && (par[x]!='=') && (x<VAR_NAME_LEN))
       varname[x] = par[x++];
   if (par[x]!='=')
       return;
   varname[x++] = 0;

  if (!strcmp(varname, "var1"))
     var1 = atoi(&par[x]);
  else if (!strcmp(varname, "var2"))
     var2 = atoi(&par[x]);
  else if (!strcmp(varname, "var3"))
     var3 = atoi(&par[x]);
  // podes adicionar mais "vars" aqui
  // ...
  //  caso o parâmetro seja uma string podes usar isto:
  else if (!strcmp(varname, "str1")) {
     strncpy(varstr1, &par[x], 20);
     varstr1[PAR_STR_LEN] = 0;  // caso seja > 20 chars strncpy não faz o append do ZERO
  }
}

void processar_received(char *buf)
{
    char *token;
    token = strtok(buf, "&");
    while (token != NULL)   {
        processar_par(token);
        token = strtok (NULL, "&");
    }
}


char command[128] = "var1=1&var2=2&var3=3&str1=ola mundo";
int main(int argc, char *argv[])
{
    processar_received(command);
    printf("var1 = %d\n", var1);
    printf("var2 = %d\n", var2);
    printf("var3 = %d\n", var3);
    printf("str1 = %s\n", varstr1);
}

Abraços,
PA
« Última modificação: 22 de Abril de 2015, 22:43 por StarRider »