Récupération de valeur dans une Bdd (besoin correction)

Bonjour je me lance des petits défit pour me perfectionner dans le codage.

Je viens de réussir à faire un petit bout de code pour récupérer des valeurs dans une Bdd car j ai cherché des exemples mais j ai rien trouvé de concret donc j ai essayé tous seul.

Voici mon petit bout de code qui marche pour avoir un avis sur la structure et si il y a des améliorations à faire.

  int i = 0;
  int b = 0;
  char *valeur = NULL;
  char stocklecture[100];
  char *stockvaleur[100];
  while(client.available()) {
    stocklecture[i] = client.read();
    i++;
  }
  if (etaitConnecte && !client.connected()) {
    Serial.println(stocklecture);
    
    for(valeur = strtok(stocklecture,",");valeur != NULL;valeur = strtok(NULL,",")){
      stockvaleur[b] = valeur;
      b++;   
    }
    Serial.println(stockvaleur[0]);
    Serial.println(stockvaleur[1]);
    Serial.println("Deconnexion !");
    client.stop();
  }

Merci d'avance
Cordialement

il faut terminer proprement votre cString avec un caractère nul '\0' quand vous avez fini la lecture

  while(client.available()) {
    stocklecture[i] = client.read();
    i++;
  }
  // ICI METTRE UN '\0' à la fin de stocklecture (en vérifiant la place dispo)

Votre buffer fait 100 caractères, ce serait surprenant que vous ayez besoin de 100 pointeurs pour trouver les valeurs.  char *stockvaleur[100];==> vous pouvez réduire ce buffer là

idéalement tester si vous ne dépassez pas la taille max des 2 buffers pour éviter des bugs

Quand vous faites

    Serial.println(stockvaleur[0]);
    Serial.println(stockvaleur[1]);

vous supposez que 2 éléments ont été lus => pas forcément le cas. la valeur de b dans la boucle précédente vous le dira.

Bon voila la maquette ^^ mais a mon avis …

il faut terminer proprement votre cString avec un caractère nul ‘\0’ quand vous avez fini la lecture

if (!client.available()) {
    for(int d=i; d<sizeof(stocklecture) ;d++){
      stocklecture[d] = '\0';  
    }
  }

idéalement tester si vous ne dépassez pas la taille max des 2 buffers pour éviter des bugs

  char stocklecture [30] ;
  char *stockvaleur[sizeof(stocklecture)];
  while(client.available()) {
    if (i < sizeof(stocklecture)){
    stocklecture[i] = client.read();
    i++;
    }
    else{
      client.read();
      Serial.println("Tab trop petite");
      }
  }

vous supposez que 2 éléments ont été lus => pas forcément le cas. la valeur de b dans la boucle précédente vous le dira.

if (etaitConnecte && !client.connected()) {
    Serial.println(stocklecture);
    
    for(valeur = strtok(stocklecture,",");valeur != NULL;valeur = strtok(NULL,",")){
      stockvaleur[b] = valeur;
      b++;   
    }
    for(int c=0; c<=b ;c++){
      Serial.println(stockvaleur[c]);  
    }
    Serial.println("Deconnexion !");
    client.stop();
  }

Voila le code complet :

   int i = 0;
  int b = 0;
  char *valeur = NULL;
  char stocklecture [30] ;
  char *stockvaleur[sizeof(stocklecture)];
  while(client.available()) {
    if (i < sizeof(stocklecture)){
    stocklecture[i] = client.read();
    i++;
    }
    else{
      client.read();
      Serial.println("Tab trop petite");
      }
  }
  if (!client.available()) {
    for(int d=i; d<sizeof(stocklecture) ;d++){
      stocklecture[d] = '\0';  
    }
  }
  
  if (etaitConnecte && !client.connected()) {
    Serial.println(stocklecture);
    
    for(valeur = strtok(stocklecture,",");valeur != NULL;valeur = strtok(NULL,",")){
      stockvaleur[b] = valeur;
      b++;   
    }
    for(int c=0; c<=b ;c++){
      Serial.println(stockvaleur[c]);  
    }
    Serial.println("Deconnexion !");
    client.stop();
  }