Как упомянуто в комментарии, есть некоторые проблемы с кодом.
ptr3 = &str2
В этой строке вы не назначаете строку для ptr3
.Скорее вы назначаете адрес указателя, который содержит начальный адрес строки.Например: предположим, что первый символ в вашей строке находится в адресной ячейке 1000. Тогда str3
содержит значение 1000. Однако сам str3
будет находиться где-то еще.Давайте предположим, что он расположен в 2000. Затем, ptr3
содержит значение 2000, а после приращения он будет указывать на 2001 и так далее.Таким образом, вы получаете неправильные и опасные значения.
Существует также проблема в строке for(ptr2 = ch;*ptr2 != '\0'; ptr2++)
.Вы назначаете значение ch для ptr2.Это должно дать вам предупреждение.Опять же, память, на которую указывает ptr2, изменяется.Итак, * ptr2 пытается разыменовать эту ячейку памяти.
Код, который я использовал бы для этого:
void insertChar(char *str1, char *str2, char ch) {
int count = 0;
while (*str1) {
*str2++ = *str1++;
++count;
if (count == 3) {
*str2++ = ch;
count = 0;
}
}
*str2 = '\0';
}
Некоторые рекомендации:
- Попробуйте объявитьпеременные, максимально приближенные к их использованию.
- Используйте параметр
-Wall
при компиляции ваших программ