Неожиданное нарушение Acess (itoa)

В К&R book, есть код Itoa в главе 3 на 64-й странице. Я пытался скомпилировать код, но мне не удалось. Вот код:

#include <iostream>
#include <conio.h>
using namespace std;
void itoa(int, char*);

int main(void) {
_getch();
char arr[100];
itoa(-18,arr);
_getch();
return 0;
}

void itoa(int n, char* s) {
int i, sign;
if ((sign = n) < 0) {
n = -n;
}
i = 0;
do {
s[i++] = n % 10 + '0';
} while ((n / 10) > 0);
if (sign < 0) s[i++] = '-';
s[i] = 0;
//reverse(s);
}

Выход:

Нарушение доступа в строке 25, которая: s[i++] = n % 10 + '0';

-3

Решение

itoa имеет бесконечный цикл, который выходит за пределы arr после генерирования 100 цифр. Цикл не модифицируется n так что может прекратить, когда n достигает 0. Изменить while условие использования n /= 10 вместо n / 10,

2

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

Других решений пока нет …

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