Emetteur recepteur 433Mhz avec afficheur LCD

J'ai testé comme ça avec la boucle for:

void loop()
{
  
  uint8_t buf[VW_MAX_MESSAGE_LEN];  /* Tableau qui va contenir le message reçu */ /* buf = tableau pour envoyer une série d'octet */
  uint8_t buflen = VW_MAX_MESSAGE_LEN; /* Taille maximum de notre tableau */
  
  
  if (vw_wait_rx_max(200)) /* Si une valeur est reçue dans les 200ms on rentre dans la boucle*/
 {
   if(vw_get_message(buf, &buflen)) /* Li le dernier message, il copie le message dans buf avec comme limite à ne pas dépasser len. Len étant la largeur du tableau */
   /* Si le message est vérifié il renvoit vrai, si le message est corompu il renvoit alors faux */
   {
     for(int x = 0; x < 5; x++)
     {
     buf[buflen] = '\0'; /* Le 0 permet à la fontion de savoir ou s'arreter, à la fin du message pour ne pas perdre d'espace inutilement*/
     lcd.print(buf[x]);
     lcd.print(buf[x]);
     lcd.print(buf[x]); /* affichera le message reçu qui a été copié dans le buf sur le LCD */
     lcd.print(buf[x]);
     lcd.print(buf[x]);
   }
   }
 }  
}

mais ça m'affiche des suite de chiffre de 1, 2, 9 ....

alors j'ai testé avec des lcd.write(buf[x]); comme ça:

     for(int x = 0; x < 5; x++)
     {
     buf[buflen] = '\0'; /* Le 0 permet à la fontion de savoir ou s'arreter, à la fin du message pour ne pas perdre d'espace inutilement*/
     lcd.write(buf[x]);
     lcd.write(buf[x]);
     lcd.write(buf[x]); /* affichera le message reçu qui a été copié dans le buf sur le LCD */
     }

et là ça m'affiche un code bizarre avec "YYYoooppp"et d'autres caractères bizaare. Mon message de base étant juste "Yop" que j'ai envoyé depuis le minteur série de l'émetteur pour tester.