sprintf et float

Bonjour,

J’ai un petit problème avec la création d’une chaine de caractères.

   char  msg[50];
    float y = 24.23;

    sprintf(msg, "Temperature : %.2f", y);
    
    Serial.println(y);
    Serial.println(msg);

m’affiche :

24.23
Temperature : ?
24.23
Temperature : ?
24.23

Je comprends pas pourquoi, si je compile ce programme pour PC ça marche.

#include <stdio.h>
#include <string.h>

void main()
{
   char msg[50];
   float y = 24.23;
   sprintf(msg, "Temperature : %.2f", y);
   printf(msg);
}

./test
Temperature : 24.23

J'ai trouvé une solution, mais comment ça se fait que le code du départ soit fonctionnel sur PC et pas sur ATMEGA ?

    char  msg[50];
    char tmp[50];
    float y = 24.23;
    
    dtostrf(y, 4, 3, tmp);
    
    sprintf(msg, "Temperature : %s", tmp);

    Serial.println(y);
    Serial.println(msg);

Oui, j'ai remarqué aussi pour sscanf.

du coup, voilà comment j'ai fait. (à condition que le nombre de décimales soit fixe)

int i, j;
float t;
sscanf(recep, "%d.%d", &i, &j);
t = i + (j/pow(10,2));

Merci pour ta réponse,

Justement le but de cette concaténation n'était pas pour une utilisation avec Serial, c'était pour envoyer sur un module rf434. (j'utilisais Serial pour debuguer) Je voulais construire la chaine :"x:yy.yy" où x est le numéro de catpeur et yy.yy la température.

Évidement, lorsque j'ai fait sscanf(recept, "%d:%.2f", &c, &t) je me suis à nouveau retrouvé avec un "?"

J'enlèverai le pow que de toute façon je voulais remplacer par une fonction me donnant le nombre de décimales.