stringA и stringB являются указателями - они содержат начальный адрес для большого двоичного объекта памяти. Память, на которую они указывают, содержит непрерывные строки символов: «abcdef» и «123» соответственно. Поскольку строки являются смежными блоками памяти (это означает, что область памяти данного символа составляет один байт после предыдущего), вы не можете вставить больше символов в середину строки без предварительного перемещения некоторых символов. В вашем случае вы даже не можете этого сделать, так как объем памяти, выделенный для каждой строки, достаточно велик, чтобы вместить ПРОСТО эту строку (игнорируя заполнение).
То, что вам нужно сделать, это скопировать строки в другой блок памяти, который вы выделили для этой цели, и скопировать их так, чтобы вторая строка начинала с х символов в первой строке.
Несколько других пользователей SO опубликовали кодовые решения, но я думаю, что вы должны попытаться найти точное решение самостоятельно (и, надеюсь, поможет мое объяснение того, что происходит на высоком уровне).