char getFilename() {
This says that the function is to return a character, which is not the same as an array of characters.
So, hey, look at that. The compiler was right. Well, we knew it was.
Now, before you think that you can actually return filename from that function, forget it. filename is a local variable which goes out of scope when the function ends. If you return a pointer to that memory, it will be garbage as soon as the memory is reused.
What you need to do is pass to the function the array that you want modified. Since arrays act a lot like pointers, define the function as taking a pointer to a char.
void getFilename(char *fileName)
{
}
and call it like so:
char myFileName[16];
getFilename(myFileName);
Let's see if you can figure out how to write to the argument in the function then. If not, come on back. We'll be here all week.