Generic enum to text lookup in C
Illegal void pointer arithmetic
This code is illegal in C:
void *array;
... (array + offset)

You are not allowed to do pointer arithmetic on a void * pointer.  You should use char * instead of void *.
Simplifications
I would suggest defining a generic structure like this:
typedef struct EnumName {
    int         value;
    const char *name;
} EnumName;

to avoid all of the struct length shenanigans.  You can also make it a rule that each EnumName array must be terminated with a NULL name.  This rule allows you to avoid passing in an array length argument.  Then your code would look like this:
const EnumName direction_data[] =
{
    {north, &quot;north&quot;},
    {south, &quot;south&quot;},
    {east,  &quot;east&quot; },
    {west,  &quot;west&quot; },
    {0,      NULL  },
};

const char *Get_text_from_enum(int enum_value, const EnumName *names)
{
    while (names-&gt;value != enum_value &amp;&amp; names-&gt;name != NULL)
        names++;
    return names-&gt;name;
}

int main(void)
{
    printf(&quot;Expect south,    got %s\n&quot;,
            Get_text_from_enum(south, direction_data));
}