Как удвоить символ с помощью копирования?
Как удвоить символ с помощью memmove?
Исходная строка: Привет, меня зовут Игоша!
Конечная строка: Привет, мення зовут Игоша!
Ответы (3 шт):
char str[] = "Hello,my name is Igosha!";
memmove(&str[12], &str[11], 3);
std::cout << str;
Удвоить текущий? Но, может, имеет смысл рассмотреть более общую задачу вставки символа?
В любом случае вам нужно, чтобы выделенной памяти было достаточно, так что, например,
char s[] = "Привет, меня зовут Игоша!";
не пройдет — вы получите выход за пределы выделенной памяти. А вот так
char s[27] = "Привет, меня зовут Игоша!";
как раз остается место для еще одного символа.
Дальше смысл примерно такой
Привет, меня зовут Игоша!
^----> копируем на один символ вправо
при этом мы получим строку
Привет, мення зовут Игоша!
Но если нужен произвольный символ, то теперь его можно просто записать в строку в нужном месте.
Копировать надо с помощью memmove, так как только эта функция корректно обрабатывает копирование перекрывающихся интервалов.
Еще вопрос в кодировке русского текста... Если это однобайтовая кодировка типа ANSI (1251) или OEM (866), то дело одно, а если многобайтовая типа UTF-8, то тут надо делать несколько иные действия для учета того, что один символ не равен одному байту...