Firstly, you cannot return a local array like that. It will go out of scope and the values may become garbage. What you need to do is to dynamically allocate it first. Once you do that, you're safe to return it.
char* work(int num){
char *buf = malloc(sizeof(char)*32);
sprintf(buf, "%d", num);
return buf;
}
Now, to receive a pointer, you'll need another pointer variable. Not an array.
int main() {
char *rValue = work(5);
}
Finally, you need to free the memory you've allocated so that it can be used in future.
int main() {
char *rValue = work(5);
free(rValue);
return 0;
}