Эта проверка здесь неверна:
if(i!=strlen(str1))
Когда i
больше strlen(str1)
, оно снова станет ложным, но предполагается, что оно останется верным. Измените это на это:
if (i < strlen(str1))
Кроме того, вы не увеличиваете i
в блоке else
. Это приведет к бесконечному циклу с постоянно растущим j
, по крайней мере до тех пор, пока неопределенное поведение не приведет к выходу вашей программы, возможно, из-за нарушения прав доступа. Попробуйте вместо этого:
else {
*(p3 + i) = *(p2 + j);
i++; // increase i in both cases
j++;
}
Или, еще лучше, сделайте это безоговорочным. Например, вы можете извлечь i++
из тела, изменив цикл следующим образом:
for (i = 0; i <= strlen(str1) + strlen(str2); i++)
Кроме того, могу ли я вас заинтересовать в записи индекса массива? Вместо этого:
if (i < strlen(str1)) {
*(p3 + i) = *(p1 + i);
}
Сделайте это:
if (i < strlen(str1)) {
p3[i] = p1[i];
}
Так будет намного чище, и люди, которые будут работать с вашим кодом, это оценят.