How to pass a struct value to a pthread in c?

#include <pthread.h>
#include <stdio.h>

struct ThreadData {
    int thread_id;
    char *message;
};

void PrintHello(void threadarg) {
    struct ThreadData *my_data;
    my_data = (struct ThreadData *) threadarg;

    printf("Thread ID: %d, Message: %s\n", my_data->thread_id, my_data->message);
    pthread_exit(NULL);
}

int main() {
    pthread_t threads;
    struct ThreadData td[2];

    td[0].thread_id = 1;
    td[0].message = "Hello, this is thread 1";
    pthread_create(&threads, NULL, PrintHello, (void *)&td[0]);

    td[1].thread_id = 2;
    td[1].message = "Hello, this is thread 2";
    pthread_create(&threads, NULL, PrintHello, (void *)&td[1]);

    pthread_exit(NULL);
}