Как удвоить символ с помощью копирования?

Как удвоить символ с помощью memmove?

Исходная строка: Привет, меня зовут Игоша!
Конечная строка: Привет, мення зовут Игоша!


Ответы (3 шт):

Автор решения: Miracle-
    char str[] = "Hello,my name is Igosha!";
    memmove(&str[12], &str[11], 3);
    std::cout << str;
→ Ссылка
Автор решения: callsign_404
 memmove(str + 11, str + 10, strlen(str));
→ Ссылка
Автор решения: Harry

Удвоить текущий? Но, может, имеет смысл рассмотреть более общую задачу вставки символа?

В любом случае вам нужно, чтобы выделенной памяти было достаточно, так что, например,

char s[] = "Привет, меня зовут Игоша!";

не пройдет — вы получите выход за пределы выделенной памяти. А вот так

char s[27] = "Привет, меня зовут Игоша!";

как раз остается место для еще одного символа.

Дальше смысл примерно такой

Привет, меня зовут Игоша!
          ^---->  копируем на один символ вправо

при этом мы получим строку

Привет, мення зовут Игоша!

Но если нужен произвольный символ, то теперь его можно просто записать в строку в нужном месте.

Копировать надо с помощью memmove, так как только эта функция корректно обрабатывает копирование перекрывающихся интервалов.

Еще вопрос в кодировке русского текста... Если это однобайтовая кодировка типа ANSI (1251) или OEM (866), то дело одно, а если многобайтовая типа UTF-8, то тут надо делать несколько иные действия для учета того, что один символ не равен одному байту...

→ Ссылка