how RF receiver gets multiply string message. help

I could not print string values which are sent from transmitter in RF receiver. How it can be?

//Transmitter



void mesaj(int xx,int yy,int zz){
 

 String msg[3];
String x1= String(xx);
String y1= String(yy);
String z1= String(zz);
msg[0]=x1;
msg[1]=y1;
msg[2]=z1;

 vw_send((uint8_t *)msg, 3);
 vw_wait_tx();
 Serial.print("x: ");Serial.print(x1);
 Serial.print("  y: "); Serial.print(y1); 
 Serial.print("  z: "); Serial.print(z1); 
 Serial.println("");
 delay(200); 
}
//Receiver

void loop() {

char buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;
    if (vw_get_message((char*)buf, &buflen)) // 
    {
    
        Serial.print((char*)buf[0]);Serial.print(" "); Serial.print((char*)buf[1]);Serial.print(" "); Serial.print((char*)buf[2]);Serial.print(" ");
        Serial.print("\n");
    }
  

}

vw_send((uint8_t *)msg, 3);

The second argument is the number of bytes to send, NOT the number of Strings to send.

The first argument is an array of Strings. Casting that to a byte pointer doesn't make a lot of sense.

char array[30];
sprintd(array, "%d, %d, %d", xx, yy, zz);
vw_send((uint8_t *)array, strlen(array));