Вы должны изменить s1
на char s1[] = "1234";
, так как вы вносите изменения в строку.
Тогда в вашей функции myreverse()
вы никогда не будете использовать переменную tmp
, которая делает ваш блок подкачки ошибка.
Исправлено:
#include <cstdio> // use the C++ versions of the header files
#include <cstring>
void myreverse(char* s) {
char tmp;
char* end = s + std::strlen(s) - 1;
for(; s < end; s++, end--) {
// swap
tmp = *s;
*s = *end;
*end = tmp; // use tmp
}
}
int main() {
char s1[] = "1234";
myreverse(s1);
printf("%s", s1);
}
Обратите внимание, что 3 строки в блоке подкачки можно заменить на std::swap(*s, *end);
, а также что myreverse()
может быть полностью заменено на std::reverse(std::begin(s1), std::end(s1));
.