sending multiple pieces of data using the 433mhz reciever and transmitter.

I am having trouble doing this i am sure that there is an easy explanation but i have spent about 5 hours and got no where. My code puts data from a dht11 into an array and sends it but i only seem to get the temp data but the humidity shows up as 0. i know that the dht 11 is outputting both pieces of data but i cant work out whether its the receiver or the transmitter code that is faulty.
here is my code:
transmitter:

#include <VirtualWire.h>

#define Vcc_PIN 6
#define GND_PIN 5
#include "DHT.h"
#define Vcc_PIN_D 12
#define GND_PIN_D 9

#define DHTPIN 11 
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
const int led_pin = 11;
const int transmit_pin = 7;
const int receive_pin = 2;
const int transmit_en_pin = 3;

void setup()
{
  // Initialise the IO and ISR
      delay(1000);
    Serial.begin(9600);	// Debugging only
    Serial.println("setup");

  vw_set_tx_pin(transmit_pin);
  vw_set_rx_pin(receive_pin);
  vw_set_ptt_pin(transmit_en_pin);
  vw_set_ptt_inverted(true); // Required for DR3100
  vw_setup(2000);	 // Bits per sec
  pinMode(GND_PIN,OUTPUT);  //power pins for dht11
  pinMode(Vcc_PIN,OUTPUT);
  digitalWrite(GND_PIN,0);
  digitalWrite(Vcc_PIN,1);
  pinMode(GND_PIN_D,OUTPUT);  //power pins for 433t
  pinMode(Vcc_PIN_D,OUTPUT);
  digitalWrite(GND_PIN_D,0);
  digitalWrite(Vcc_PIN_D,1);
  dht.begin();
}

byte count = 1;

void loop()
{
  delay(2000);
  float h = dht.readHumidity();
  // Read temperature as Celsius
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit
  float f = dht.readTemperature(true);
  
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  // Compute heat index
  // Must send in temp in Fahrenheit!
  float hi = dht.computeHeatIndex(f, h);
  int msg[3];
  msg[0] = t;
  msg[1] = h;
  digitalWrite(led_pin, HIGH); // Flash a light to show transmitting
  vw_send((uint8_t *)msg, 2);
  vw_wait_tx(); // Wait until the whole message is gone
  digitalWrite(led_pin, LOW);
  delay(1000);
  Serial.print(msg[0], DEC);
  Serial.print("   ");
  Serial.print(msg[1], DEC);
  Serial.print("   ");
  
}

receiver:

#include <VirtualWire.h>

const int led_pin = 6;
const int transmit_pin = 12;
const int receive_pin = 4;
const int transmit_en_pin = 3;

void setup()
{
    delay(1000);
    Serial.begin(9600);	// Debugging only
    Serial.println("setup");

    // Initialise the IO and ISR
    vw_set_tx_pin(transmit_pin);
    vw_set_rx_pin(receive_pin);
    vw_set_ptt_pin(transmit_en_pin);
    vw_set_ptt_inverted(true); // Required for DR3100
    vw_setup(2000);	 // Bits per sec

    vw_rx_start();       // Start the receiver PLL running
}

void loop()
{
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = VW_MAX_MESSAGE_LEN;
  if(vw_get_message(buf, &buflen)) // non-blocking I/O
  {
    // Message with a good checksum received, dump it
    Serial.print("temp: ");Serial.print(buf[0],DEC);
    Serial.print("  Humidity: "); Serial.print(buf[1], DEC); 
    Serial.println("");
  }
}

thanks for the help in advance

thanks anyone but i have now managed to get it working 5 mins after posting this lol. The solution was to change the int to char in the array.

 vw_send((uint8_t *)msg, 2);

You are not sending two messages, you are sending two bytes. Originally, your two integer messages were four bytes. When you changed them to char you are now at one byte each for t and h.

You can let the compiler do the work with

 vw_send((uint8_t *)msg, sizeof(msg));
  float t = dht.readTemperature();
  // Read temperature as Fahrenheit
  float f = dht.readTemperature(true);

Don't you know which unit of measure you use?