From the man page of strcat(),
char *strcat(char *dest, const char *src);
and
The strcat() and function return a pointer to the resulting string dest.
As per your usage, dest is the base address of char meh1[32], which is local to meh(). Once the control returns from the meh(), the meh1 goes out of scope. So, the result of printf() is undetermined [undefined behaviour].
To make it work, use pointers and dynamic memory allocation for meh1.
For example,
char *meh1 = NULL;
meh1 = malloc(32);
strcpy(meh1, "this");
and the rest of existing meh().
The dynamically allocated pointer can be returned as per your requirement. At the end of main(), you need to free() the returned pointer to avoid memory leak.
Also, you need to use printf() like
printf("%s\n", meh());
printf(meh());? Where did you read that?strcat()returnsmeh1) to calling code. Don't useprintf()like that: useprintf("%s\n", meh());. Returning a (pointer to) a local variable is a recipe for disaster; you get undefined behaviour, which means that the program can do almost anything and whatever happens is OK because there is no requirement on the compiler to do anything sensible with undefined behaviour.printf(meh());could lead to anUncontrolled format string vulnerabilityifmeh()returns a string formed from user supply input, more information here: en.wikipedia.org/wiki/Uncontrolled_format_string#Details