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));