String literals are immutable in C (and C++).
To concatenate one string to another string the last string (that is a character array) shall have enough space to accomodate the first string.
So ons of solutions using pointers is to allocate dynamically enough memory for a (result) character array and then concatenate the strings inside the character array.
For example
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#define Hyphen " - "
int main( void )
{
const char *x = "Hello";
const char *y = "'World'";
size_t n = strlen( x ) + strlen( y ) + strlen( Hyphen ) + 1;
char *s = malloc( n );
strcpy( s, x );
strcat( s, Hyphen );
strcat( s, y );
puts( s );
free( s );
return 0;
}
The program output is
Hello - 'World'
If you want to exclude the single quotes around the string "'World'"
then the code can look the following way.
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#define Hyphen " - "
int main( void )
{
const char *x = "Hello";
const char *y = "'World'";
size_t n = strlen( x ) + ( strlen( y ) - 2 ) + strlen( Hyphen ) + 2;
char *s = malloc( n );
strcpy( s, x );
strcat( s, Hyphen );
strcat( s, y + 1 );
s[strlen( s ) - 1] = '\0';
// or
// s[n - 2] = '\0';
puts( s );
free( s );
return 0;
}