【发布时间】:2016-12-03 19:15:53
【问题描述】:
在 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);
}
输出:
第25行访问冲突,即:
s[i++] = n % 10 + '0';
【问题讨论】:
-
(n / 10)-->(n /= 10) -
这不是编译错误。
-
调试器是解决此类问题的正确工具。 在询问 Stack Overflow 之前,您应该逐行逐行检查您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题,以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
-
s[i++]将超出范围,因为如果循环仅分支一次,则循环永远不会结束,因为未分配n。 (见 BLUEPIXY 的评论) -
@πάνταῥεῖ:它是半破解的 C 代码,因此可以通过 C++ 编译器进行编译。 K&R 是一本 C 书;所有程序都是C程序。
标签: c++ access-violation itoa