int arrlength = sizeof(newpath);
заставляет размер всего вашего массива (в char
с) присваиваться arrlength
.Это означает, что вы перебираете в массиве более 99999 символов, даже если путь короче (что, вероятно, и есть).
Условие вашего цикла также позволяет пройти за границы массива (начиная с последнего (99999) элемент на самом деле имеет индекс 99998, а не 99999 - массивы начинаются с нуля):
for (int i = 0; newpath[i]] != '\0'; i++)
Кроме того, нет причин сначала копировать строку в массив символов, когда вы можете зацикливаться наstring
объект напрямую.
В любом случае, нет необходимости экранировать обратную косую черту от пользовательского ввода .Обратная косая черта - это отдельный символ, как и любой другой;он только особенный, если он встроен в строковые литералы в вашем коде .