Java hides a lot of the behind-the-scenes stuff from you. Every object is really a pointer or a reference to the actual object. In C, you don't have objects (at least not in the traditional sense, although you can fake them with function pointers).
All strings are in C are just arrays of chars with a trailing '\0' char. A string can also be represented by a pointer to the first char of such a sequence.
As already mentioned, in C you can't return local arrays because they get destroyed. I believe you can do it in Java because Java arrays are actually objects. The array you would have in a Java function is actually a pointer to that array object (which is dynamically allocated).
The way to allocate objects in Java is through the new keyword. In C, dynamic memory is allocated through the malloc() function. Also of importance, you have to manually deallocate all allocated memory in C. You do this with the free() function.
An example of how to return a string from a function would be something like this:
int main(int argc, char *argv)
printf("Enter a string: ");
szString = getString();
if(szString != NULL)
printf("You entered: %s\n",szString);
size_t ssize = BUFSIZ*(sizeof(*s));
s = (char *)malloc(ssize);
len = strlen(s) - 1;
if(s[len] == '\n') /* *Corrected* Thanks to Mr. Sinkula for finding this error. :) */
s[len] = '\0';