collapse

* Posts Recentes

Circuito de Botões por almamater
[Hoje às 16:56]


chave dinometrica por jm_araujo
[08 de Julho de 2020, 22:00]


Sensor RCWL-0516 por almamater
[03 de Julho de 2020, 10:14]


DVD Laser Scanner Microscope por dropes
[28 de Junho de 2020, 14:25]


Noticia - esquema na alfandega por KammutierSpule
[24 de Junho de 2020, 14:37]


Ajuda - Amp Fender Princeton por jm_araujo
[22 de Junho de 2020, 10:55]


Arca Frigorífica por dropes
[21 de Junho de 2020, 21:10]


Placa poliuretano onde comprar ? por Hydrops
[14 de Junho de 2020, 12:15]


Detector de AC - Projecto com PCB por SerraCabo
[10 de Junho de 2020, 22:30]


brushless 3 phases motors por senso
[10 de Junho de 2020, 22:10]

Autor Tópico: Dividir String em variaveis  (Lida 10135 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 »