You can't safely return the address of a local variable. As soon as the function returns, the variable goes out of scope and the contents are liable to be overwritten by any other operation that causes the stack to extend over it. It's better to pass in the address of a buffer which the received data is to be placed in.
byte data[c];
return data;