First, it's not clear what you want to do. It's not possible to "point" to another struct using a one-byte value. Secondly, it doesn't make sense to place the first byte of the second struct in ch[0] without doing anything else.
The way the struct is constructed I suspect that that it is designed to be a variable length struct. (Other answers have touched this, but they use the extra space to store a pointer, not the entire string.)
By allocating some extra bytes, you would get the following layout in memory:
+----
| Variable a
| Variable 2 (sic)
| ch[0]
+------ Extra memory below:
| ch[1]
| ...
| ch[N]
+------
You can allocate this by:
p = malloc(sizeof(Element) + N);
You can access the element like p->ch[4] and access ch as a string using p->ch.
Now, it's up to you to fill your ch array with the string (or whatever) you want.
structby a longer character array?