collapse

* Posts Recentes

Amplificador - Rockboard HA 1 In-Ear por almamater
[27 de Março de 2024, 19:13]


O que é isto ? por KammutierSpule
[26 de Março de 2024, 19:35]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Emulador NES em ESP32 por dropes
[13 de Março de 2024, 21:19]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]


Meu novo robô por josecarlos
[06 de Janeiro de 2024, 16:46]


Laser Engraver - Alguém tem? por almamater
[16 de Dezembro de 2023, 14:23]

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