A string in C needs to be terminated. So you want to do
new->name[0] = character;
new->name[1] = '\0';
Otherwise you will see all the "gibberish" that was in memory (malloc doesn't clear the memory, so it's pointing to "whatever was there").
Not also the excellent point made by @self - you are not allocating enough memory for the structure, but only for the pointer to the structure. And in modern C (anything after C89, really) you don't cast the result of malloc - that's "old K&R" (I know, because it's what I learnt...). These days you should just write
new = malloc(sizeof(*new));
By using sizeof(*new)
you guarantee that the size will be right, even if you change your mind about the type of new
in the future... It is the cleanest way to do this (and a nod to @WhozCraig who pointed this out in a comment).