Проблема в том, что к тому времени, когда вы пытаетесь напечатать строку, ptr2
указывает на ее конец. Попробуйте сделать копию этого указателя и обойти строку.
char *ptr2 = new char[strlen(ptr1)+1];
char *ptr3 = ptr2; // create a copy of the pointer and work with that
while(*ptr1){
*ptr3 = *ptr1;
ptr3++;
ptr1++;
}
*ptr3 = '\0';
printf("%s",ptr2);
delete[] ptr2;
// ... and then null out ptr2 or ptr3 if needed
Вы должны рассмотреть возможность использования std::string
вместо того, чтобы делать это вручную.