There are two problems here.
First, when you create a string like this
cpp
you are actually creating an array of 5 characters ('t', 'h', 'i', 's', '\0') in read-only memory. Any attempt to modify this string will result in a segfault as you've seen. The proper way to declare this string is to declare it as you have the world variable, which is as a constant. That way, any attempts to change it will be caught by the compiler.
If you need to modify this string, then you would declare it thusly:
cpp
which ends up being created in memory you *can* modify, but there's a caveat. You can only modify the four non-null characters in the string. If you concatenate onto this string, you may be writing over some other variable's memory and all hell could break loose down the line.
You should create a character buffer that contains enough space to accept both strings, copy the first one into it, then concatenate the second one to that:
cpp
const char *str1 = "this";
const char *str2 = "world";
char buffer[256];
strcpy(buffer, str1);
strcat(buffer, str2);
printf("Buffer contents: %s\n", buffer);