On est d'accord que messageToReceive va avoir la meme taille que messageToSend, soit 141?
et que message lui aurra la taille correspondant au nombre de caractere contenu dans messageToSend?
Je doute concernant sizeof(), s'il ne va pas me retourner une autre valeur?
Sizeof retourne la taille du type passé en paramètre en bytes.
Quand on crée un tableau, on attend le nombre d'éléments attendu (141 = 141 chars, or un char fait 4 bytes, donc sizeof te retourne 141*4). Ici ça fonctionne car tu alloue plus des 141 caractères utilisés. Mais du coup tu gâche de la mémoire.
Accessoirement, la tu as un bug qui t'attends au tournant: Si jamais ton messageToSend est un jour alloué dynamiquement, le type sera char* et donc la sizeof te retournera 8 (taille d'un pointeur).
Globalement en C, on ne peux pas (et ne doit pas) pouvoir compter la taille d'un tableau. Mon conseil c'est de définir la taille dans un define comme ça:
Ainsi le code reste clair et net, la taille peut être réutilisée à divers endroits (donc on est sur d'avoir la même taille partout). De plus, comme c'est résolu a la compilation, on économise des calculs inutiles sur l'arduino.
Cela t'éclaire?
Autre remarque, on est bien d'accord que strlenf retourne le nombre de caractère entre le début de la chaine et le caractère null (/0) terminal? Si tu écrit 141 caractères tout pile, tu n'aura pas de caractère null et du coup tu aura une segfault ici. A mon avis tu ferais mieux d'utiliser MESSAGE_SIZE et tampis pour les X caractères perdus.
Non atrakeur, un char fait 1 byte et pas 4. Et un pointeur fait 2 bytes et pas 8.
On peut calculer sans problèmes (et heureusement...) le nombre d'éléments dans un tableau en divisant la taille totale du tableau par la taille d'un élément du tableau...
sizeof( tableau ) / sizeof( tableau[0] )
Comme ici c'est un tableau de char, ça donnerait 141 / 1 = 141. Si c'était un tableau de long ça donnerait 564 / 4 = 141. sizeof est lui aussi résolu à la compilation, donc un calcul comme celui-ci devient une constante après compilation
On est d'accord que messageToReceive va avoir la meme taille que messageToSend, soit 141?
Oui, mais attention, comme expliqué ci-dessus, ça fonctionne uniquement parce que un char pèse un byte
et que message lui aurra la taille correspondant au nombre de caractere contenu dans messageToSend?
Oui, bien que je ne connaisse pas la fonction strlenf, je ne connais que strlen donc je suppose que c'est une erreur de frappe.