意外访问冲突 (itoa)
Unexpected Acess violation (itoa)
K&R书第3章第64页有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);
}
输出:
Access violation on line 25, which is: s[i++] = n % 10 + '0';
itoa
产生100个数字后,无限循环超出了arr
的界限。循环不修改 n
,因此它可以在 n
达到 0 时终止。更改 while
条件以使用 n /= 10
而不是 n / 10
。
K&R书第3章第64页有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);
}
输出:
Access violation on line 25, which is:
s[i++] = n % 10 + '0';
itoa
产生100个数字后,无限循环超出了arr
的界限。循环不修改 n
,因此它可以在 n
达到 0 时终止。更改 while
条件以使用 n /= 10
而不是 n / 10
。