cstring — Почему этот простой метод обращения строк в стиле c ++ c вызывает исключение нарушения прав доступа?

Я работал с языком программирования Страуструпа C ++, и у меня возникли трудности с ранним exersize. Задача состоит в том, чтобы создать метод rev, который переворачивает строку стиля c. Я думаю, что моя логика верна, но я получаю ошибку, когда пытаюсь изменить строку. Могу ли я не сделать это?

int strlen_(char* string)
{
int count = 0;
while (*string != '\0'){
count ++;
string ++;
}

return count;
}

void rev(char* string)
{
//length of the string is going to be useful
int len = strlen_(string);

//two counters, one going forward, one going back

int forwardIndex = 0;
int backwardIndex = len-1;

char temp;
while (forwardIndex < backwardIndex){
temp = string[forwardIndex];
string[forwardIndex] = string[backwardIndex];   //Exception Here
string[backwardIndex] = temp;
forwardIndex--;
backwardIndex--;
}

}

void main()
{
char* test = "test";
rev(test);
}

0

Решение

Вы не можете изменять строковые литералы, а ваша обратная функция изменяет свой строковый аргумент.

Проверьте свою обратную функцию, передавая что-то вроде этого:

void main()
{
char test[] = "test";
rev(test);
}

Это сделает копию литеральной строки "test" в массиве, который вы можете изменить.

Кроме того, вы уменьшаете оба forwardIndex а также backwardIndex: ты должен быть приращение forwardIndex: forwardIndex++, По идее, индексы встретятся посередине.

5

Другие решения

Кажется, вы уменьшаете forwardIndex. После первого запуска будет -1. Ищу forwardIndex--; и изменить на forwardIndex++;

0

По вопросам рекламы [email protected]