collapse

* Posts Recentes

tecnologias web para servidor num MCU por KammutierSpule
[12 de Dezembro de 2019, 13:24]


Alimentação microfones sinples a condensador por jm_araujo
[12 de Dezembro de 2019, 11:00]


Transição de Orcad para Kicad por KammutierSpule
[11 de Dezembro de 2019, 10:42]


Eixo "SEXTAVADO" por senso
[10 de Dezembro de 2019, 12:50]


Compra Colectiva Mouser N5-2018 (~Dezembro 2019) [update] por Hugu
[09 de Dezembro de 2019, 18:14]


Limitador de corrente simples por vasco
[07 de Dezembro de 2019, 17:07]


Baterias Lipo Potentes por jm_araujo
[07 de Dezembro de 2019, 16:03]


Empresas que bobinem alto-falastes ou motores? por fergas
[06 de Dezembro de 2019, 20:12]


Fake's, ICs e transistores por vasco
[03 de Dezembro de 2019, 18:19]


Vídeo: Ferramenta (e 'cartão' preso em pen 3G) por SerraCabo
[02 de Dezembro de 2019, 00:06]

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