C99だとこういうことできるんかな?

void *shuffle(void *base, size_t nmemb, size_t size)
{
    typedef struct { char data[size]; } memb;
    memb *dest = base, buf;
    int i, n;

    for(i = 0; i < nmemb; i++){
    n = rand() % nmemb;
        buf = dest[n];
        dest[n] = dest[i];
        dest[i] = buf;
    }
    return base;
}

試してないけど...