From K&R2:
"""
A union is a variable that may hold (at different times) objects of different types and sizes, with the compiler keeping track of size and alignment requirements.
"""
You're indeed using the incorrect data structure here. You should be using a 'struct' instead of a union.
A union is useful if you have a variable that could be one (and only one) kind of a choice of differing data types.
I find the name 'union' misleading since a mathematical union implies the entire collection of all its members, whereas a C union does not contain all its members at once. Furthermore, the syntax for a union is identical to a struct:
union u_tag {
int ival;
float fval;
char *sval;
} u;
Infact, a union is a special case of a struct where all members have offset zero from the base and sufficient memory is allocated to hold the biggest member.
One rule of thumb to quickly decide whether to use a struct or a union is that all members of a union should have similar names, as they can all be used to represent the same kind of data (albeit with a differing data type). The fact that the members of your union have very different names (name, fnct, args) representing entirely different kinds of data, is a give away that a struct is the right choice of data structure.