Как сказал JaredPar, измените объявление ptr на
const char* ptr;
И это должно работать. Хотя это выглядит удивительно (как вы можете выполнить итерацию константного указателя?), Вы на самом деле говорите, что указательный символ - это констант, а не сам указатель. Фактически, есть два разных места, где вы можете применять const (и / или volatile) в объявлении указателя, причем каждая из 4 перестановок имеет немного различное значение. Вот варианты:
char* ptr; // Both pointer & pointed-to value are non-const
const char* ptr; // Pointed-to value is const, pointer is non-const
char* const ptr; // Pointed-to value is non-const, pointer is const
const char* const ptr; // Both pointer & pointed-to value are const.
Кто-то (я думаю, что Скотт Мейерс) сказал, что вы должны читать декларации указателя наизнанку, т.е.
const char* const ptr;
... будет читаться как "ptr - это постоянный указатель на постоянный символ".
Удачи!
Drew