incompatible types in assignment of ‘char [12]’ to ‘char [13]’ [Résolu]

bonjour les fous :slight_smile:
je bute sur un truc tout con depuis hier et la réponse doit être d'une évidence qui crève les yeux
le but du jeu est le suivant
une variable char
lecture eeprom, donc vers un string
comparaison des 2 variables

pour info, ide 0.23, vu que c'est la seule qui me flingue pas mon prog
à la comile, j'ai le message d'erreur
incompatible types in assignment of ‘char [12]’ to ‘char [13]’
même en changeant les chiffre 12-13, toujours la même chose

j'ai tenté pas mal de solution comme le
sprintf
charBuf += (char)number2[ii]

et autres bidouilles

#include <EEPROM.h>
#include <string.h>
//**************************************************************************
char number1[]="+00000000000";  //Destination number 
String number2 ="";
void setup() 
{
      char charBuf[12] = "";
      Serial.println("lecture eeprom");
      for(int iii;iii<13;iii++){
        numero[iii] = EEPROM.read(iii) ;
        number2 += numero[iii];
      }
        number2.toCharArray(charBuf,12);
//jusque là, pas d'erreur

//ca bug ici
          if (strcmp(charBuf, number1) == 0){
              Serial.println("identique");
          }else{
               number1 = charBuf; 
                }
}

bon y a pas mort d'homme, mais j'aimerai bien comprendre pourquoi ca bug
merci d'avance

Salut,
charBuf est un tableau de 12 char, alors que number1 est un tableau de 13 char (les 12 caractères de l'initialisation plus le caractère nul de terminaison de chaîne \0), du coup ça merdouille forcément un peu ici :

number1 = charBuf;

infobarquee:
pour info, ide 0.23, vu que c'est la seule qui me flingue pas mon prog

Il serait certainement intéressant d'investiguer ce problème plus avant (même si ça n'a aucun rapport avec le soucis actuel).

En fait qu'est-ce que tu essayes de faire avec cette affectation?

j'ai un numéro de téléphone de base number1
je rentre via la console un autre numéro et le mets en eeprom afin de basculer sur ce numéro
si le numéro number1 est identique à celui de l'eeprom, on ne change rien
si le numéro number1 est différent à celui de l'eeprom, on prend celui de l'eeprom

le truc vraiment de base, mais je bute franchement jusqu'à remplacer le number1 par celui de l'eeprom

fdufnews:
En fait qu'est-ce que tu essayes de faire avec cette affectation?

Moui, ça n'est pas très clair je crois qu'il y a certains bugs cachés dans ce code, mais je gardais ça pour plus tard après résolution des erreurs de compilation :slight_smile:

infobarquee:
j'ai un numéro de téléphone de base number1
je rentre via la console un autre numéro et le mets en eeprom afin de basculer sur ce numéro
si le numéro number1 est identique à celui de l'eeprom, on ne change rien
si le numéro number1 est différent à celui de l'eeprom, on prend celui de l'eeprom

le truc vraiment de base, mais je bute franchement jusqu'à remplacer le number1 par celui de l'eeprom

il faut faire un strcpy ( ou mieux un strncpy) pour copier une chaîne dans une autre.

infobarquee:
si le numéro number1 est identique à celui de l'eeprom, on ne change rien
si le numéro number1 est différent à celui de l'eeprom, on prend celui de l'eeprom

À mon avis ce test est inutile : il est plus coûteux en termes de temps et de place mémoire que de toujours prendre le résultat de la dernière lecture de l'EEPROM. Sauf si bien sûr en conditions réelles le changement de numéro implique l'appel à plusieurs autres fonctions que ce programme (de test ?) ne montrent pas, auquel cas ma remarque devient caduque :slight_smile:

merci du coup de pouce,
j'avais déjà utilisé strcpy, MAIS j'avais merdouillé sur un tru en fait comme une grosse truffe. :frowning:
voici la marche a suivre

char number1[]="+00000000000";  //Destination number 
String number2 ="";
char charBuf[12] = "";
[b]byte numero;[/b] // ici mon manque de lucidité au lieu de char

void setup(){
      Serial.println("lecture eeprom");
      for(int iii=0;iii<13;iii++){
        numero = EEPROM.read(iii) ;
        number2 = number2 + numero;
        Serial.print(number2);
      }
        number2.toCharArray(charBuf,13);
          Serial.println("test");
          if (strcmp(charBuf, number1) == 0){
              Serial.println("identique");
          }else{
            strcpy(number1,charBuf);
               Serial.println(number1);
                }

}

Pour la sécurité, strncpy est préférable car il empêche les débordements de chaîne en limitant le nombre de caractères copiés.