救命啊!! C语言问题,很急很急很急!!!

作者&投稿:赵顷 (若有异议请与网页底部的电邮联系)
C语言变成问题急急急急急!!!~

/**找出这样4位数,当它逆向排列时得到的4位数是他们自身的倍数
*@author:banxi1988
*@date:2010-12-7
*/
#include

int main(int argc, char **agrv){
int nums[4];
int count = 0;
int index = 0;
int satisfy = 0;
long n = 0;
long midn;
long reverse=1;
unsigned long divide = 1;

int i = 0;
int sum = 0;
putchar('
');
for(n = 1000;n<10000;n++){

count=0;
divide = 1;
midn = n;
reverse = 0;
do{
divide = divide *10;
nums[count]=midn%10;
midn = midn/10;
count++;
}while( n>=divide);

index = 0;
divide = divide/10;

if(nums[index]==0){
continue;
}//if
while(index<4){
reverse += divide*nums[index];
divide = divide/10;
index++;
}//while


if(reverse%n==0){
satisfy++;
printf("4位数:%5ld 能够被它的逆向排列时得到的4位数:%5ld 整除.
",n,reverse);
}//if

}//for
printf("满足条件的数共有:%3d 个",satisfy);
putchar('
');

return 0;
}//main:

/********************输出结果如下:

4位数: 1001 能够被它的逆向排列时得到的4位数: 1001 整除.
4位数: 1089 能够被它的逆向排列时得到的4位数: 9801 整除.
4位数: 1111 能够被它的逆向排列时得到的4位数: 1111 整除.
4位数: 1221 能够被它的逆向排列时得到的4位数: 1221 整除.
4位数: 1331 能够被它的逆向排列时得到的4位数: 1331 整除.
4位数: 1441 能够被它的逆向排列时得到的4位数: 1441 整除.
4位数: 1551 能够被它的逆向排列时得到的4位数: 1551 整除.
4位数: 1661 能够被它的逆向排列时得到的4位数: 1661 整除.
4位数: 1771 能够被它的逆向排列时得到的4位数: 1771 整除.
4位数: 1881 能够被它的逆向排列时得到的4位数: 1881 整除.
4位数: 1991 能够被它的逆向排列时得到的4位数: 1991 整除.
4位数: 2002 能够被它的逆向排列时得到的4位数: 2002 整除.
4位数: 2112 能够被它的逆向排列时得到的4位数: 2112 整除.
4位数: 2178 能够被它的逆向排列时得到的4位数: 8712 整除.
4位数: 2222 能够被它的逆向排列时得到的4位数: 2222 整除.
4位数: 2332 能够被它的逆向排列时得到的4位数: 2332 整除.
4位数: 2442 能够被它的逆向排列时得到的4位数: 2442 整除.
4位数: 2552 能够被它的逆向排列时得到的4位数: 2552 整除.
4位数: 2662 能够被它的逆向排列时得到的4位数: 2662 整除.
4位数: 2772 能够被它的逆向排列时得到的4位数: 2772 整除.
4位数: 2882 能够被它的逆向排列时得到的4位数: 2882 整除.
4位数: 2992 能够被它的逆向排列时得到的4位数: 2992 整除.
4位数: 3003 能够被它的逆向排列时得到的4位数: 3003 整除.
4位数: 3113 能够被它的逆向排列时得到的4位数: 3113 整除.
4位数: 3223 能够被它的逆向排列时得到的4位数: 3223 整除.
4位数: 3333 能够被它的逆向排列时得到的4位数: 3333 整除.
4位数: 3443 能够被它的逆向排列时得到的4位数: 3443 整除.
4位数: 3553 能够被它的逆向排列时得到的4位数: 3553 整除.
4位数: 3663 能够被它的逆向排列时得到的4位数: 3663 整除.
4位数: 3773 能够被它的逆向排列时得到的4位数: 3773 整除.
4位数: 3883 能够被它的逆向排列时得到的4位数: 3883 整除.
4位数: 3993 能够被它的逆向排列时得到的4位数: 3993 整除.
4位数: 4004 能够被它的逆向排列时得到的4位数: 4004 整除.
4位数: 4114 能够被它的逆向排列时得到的4位数: 4114 整除.
4位数: 4224 能够被它的逆向排列时得到的4位数: 4224 整除.
4位数: 4334 能够被它的逆向排列时得到的4位数: 4334 整除.
4位数: 4444 能够被它的逆向排列时得到的4位数: 4444 整除.
4位数: 4554 能够被它的逆向排列时得到的4位数: 4554 整除.
4位数: 4664 能够被它的逆向排列时得到的4位数: 4664 整除.
4位数: 4774 能够被它的逆向排列时得到的4位数: 4774 整除.
4位数: 4884 能够被它的逆向排列时得到的4位数: 4884 整除.
4位数: 4994 能够被它的逆向排列时得到的4位数: 4994 整除.
4位数: 5005 能够被它的逆向排列时得到的4位数: 5005 整除.
4位数: 5115 能够被它的逆向排列时得到的4位数: 5115 整除.
4位数: 5225 能够被它的逆向排列时得到的4位数: 5225 整除.
4位数: 5335 能够被它的逆向排列时得到的4位数: 5335 整除.
4位数: 5445 能够被它的逆向排列时得到的4位数: 5445 整除.
4位数: 5555 能够被它的逆向排列时得到的4位数: 5555 整除.
4位数: 5665 能够被它的逆向排列时得到的4位数: 5665 整除.
4位数: 5775 能够被它的逆向排列时得到的4位数: 5775 整除.
4位数: 5885 能够被它的逆向排列时得到的4位数: 5885 整除.
4位数: 5995 能够被它的逆向排列时得到的4位数: 5995 整除.
4位数: 6006 能够被它的逆向排列时得到的4位数: 6006 整除.
4位数: 6116 能够被它的逆向排列时得到的4位数: 6116 整除.
4位数: 6226 能够被它的逆向排列时得到的4位数: 6226 整除.
4位数: 6336 能够被它的逆向排列时得到的4位数: 6336 整除.
4位数: 6446 能够被它的逆向排列时得到的4位数: 6446 整除.
4位数: 6556 能够被它的逆向排列时得到的4位数: 6556 整除.
4位数: 6666 能够被它的逆向排列时得到的4位数: 6666 整除.
4位数: 6776 能够被它的逆向排列时得到的4位数: 6776 整除.
4位数: 6886 能够被它的逆向排列时得到的4位数: 6886 整除.
4位数: 6996 能够被它的逆向排列时得到的4位数: 6996 整除.
4位数: 7007 能够被它的逆向排列时得到的4位数: 7007 整除.
4位数: 7117 能够被它的逆向排列时得到的4位数: 7117 整除.
4位数: 7227 能够被它的逆向排列时得到的4位数: 7227 整除.
4位数: 7337 能够被它的逆向排列时得到的4位数: 7337 整除.
4位数: 7447 能够被它的逆向排列时得到的4位数: 7447 整除.
4位数: 7557 能够被它的逆向排列时得到的4位数: 7557 整除.
4位数: 7667 能够被它的逆向排列时得到的4位数: 7667 整除.
4位数: 7777 能够被它的逆向排列时得到的4位数: 7777 整除.
4位数: 7887 能够被它的逆向排列时得到的4位数: 7887 整除.
4位数: 7997 能够被它的逆向排列时得到的4位数: 7997 整除.
4位数: 8008 能够被它的逆向排列时得到的4位数: 8008 整除.
4位数: 8118 能够被它的逆向排列时得到的4位数: 8118 整除.
4位数: 8228 能够被它的逆向排列时得到的4位数: 8228 整除.
4位数: 8338 能够被它的逆向排列时得到的4位数: 8338 整除.
4位数: 8448 能够被它的逆向排列时得到的4位数: 8448 整除.
4位数: 8558 能够被它的逆向排列时得到的4位数: 8558 整除.
4位数: 8668 能够被它的逆向排列时得到的4位数: 8668 整除.
4位数: 8778 能够被它的逆向排列时得到的4位数: 8778 整除.
4位数: 8888 能够被它的逆向排列时得到的4位数: 8888 整除.
4位数: 8998 能够被它的逆向排列时得到的4位数: 8998 整除.
4位数: 9009 能够被它的逆向排列时得到的4位数: 9009 整除.
4位数: 9119 能够被它的逆向排列时得到的4位数: 9119 整除.
4位数: 9229 能够被它的逆向排列时得到的4位数: 9229 整除.
4位数: 9339 能够被它的逆向排列时得到的4位数: 9339 整除.
4位数: 9449 能够被它的逆向排列时得到的4位数: 9449 整除.
4位数: 9559 能够被它的逆向排列时得到的4位数: 9559 整除.
4位数: 9669 能够被它的逆向排列时得到的4位数: 9669 整除.
4位数: 9779 能够被它的逆向排列时得到的4位数: 9779 整除.
4位数: 9889 能够被它的逆向排列时得到的4位数: 9889 整除.
4位数: 9999 能够被它的逆向排列时得到的4位数: 9999 整除.
满足条件的数共有: 92 个


*******************************/

选择答案是:
DDBCC DCCCC

是tNode->position数组越界了,具体的话就是第128个"the"这个单词的position数组越界了,你将这个数组的长度定义成BUFSIZ,在默认情况下就是512,当读到第128个"the"时,数组长度超过512,所以报错
改正的方法有两个:
1.把BUFSIZ定义的大一些,在main.c的第173行加上
if (strlen(tNode->position) + strlen(temp) + 1 >= 512) {
printf("Error here, and the word [%s], tNode->position size[%d]\n", tNode->data, strlen(tNode->position));
getchar();
exit(0);
}
出错处理,凑合着能用,不至于崩溃。
2.不用固定值,用realloc函数,每次数组即将越界的时候追加申请新的内存。

看了一下,这种逻辑复杂,不是花24小时搞完的

下载不了……