意外的违规行为(itoa)

时间:2016-12-03 19:15:53

标签: c++ access-violation itoa

在K& R书中,第64页的第3章中有itoa代码。我试图编译代码,但我没有成功。这是代码:

#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';

1 个答案:

答案 0 :(得分:2)

itoa有一个无限循环,在生成100位数后超出arr的界限。循环不会修改n,因此它可以在n达到0时终止。将while条件更改为使用n /= 10而不是n / 10