【发布时间】:2012-11-06 15:07:27
【问题描述】:
目前我正在尝试构建一个程序来打印所有 armstrongnumbers 直到某个数字。尝试运行此程序时出现一些奇怪的错误。它说缓冲区溢出。 导致它的部分似乎在 main() 中。感谢您的帮助。
#include <stdio.h>
#define MAXIMUM 1000000
int ipow(int x, int power){
int z,t;
t = 0;
z = x;
for (t = 0; t < (power - 1); t++) {
z = z * x; }
return z;
}
int getLength(int x) {
int a;
a = 1;
for (a=1;1;a++) { if (x < ipow(10,a) && x >= ipow(10,(a-1))) return a; }
}
int getExpSum(int x) {
int summe,r,s,t;
int digit[8]={0,0,0,0,0,0,0,0};
summe=0;
s = getLength(x);
t = x;
r = 1;
for (s=getLength(x);s!=0;s--){
digit[s] = t % 10;
t = t / 10;
}
for(r=1;r<(getLength(x)+1);r++)
{
summe = summe + ipow(digit[r],getLength(x));
}
return summe;
}
int Armstrong (int x) {
if (getExpSum(x)==x) {
printf("%d ist eine Armstrongzahl\n", x);
return 1;
}
return 0;
}
void main(){
int z;
z = 0;
for (z=0;z<MAXIMUM;z++){
Armstrong(z+1);
}
}
【问题讨论】:
-
for (a=1;a=a;a++)棘手且没有任何好处。 -
@user1803470:
for (a = 1; ; ++a)。或者for (a = 1; 1; ++a),如果您不喜欢空条件的外观,但有些编译器会为此发出警告。 -
已将其更改为 1。谢谢。主要错误仍然存在。
标签: c buffer-overflow