为什么这个程序会出现“堆栈粉碎错误”?

时间:2010-08-11 13:22:58

标签: c

输入.txt内容

start_point(0)
end_point(100)
turtle_speed(3)
hare_speed(6)
hare_sleep_time(5)
hare_turtle_dist(20)
process_delay(1)    
如果我把hare-TURTLE_DIST大于10,那么会发生堆栈粉碎错误

#include<stdio.h>
#include<stdlib.h>

void get(int *a,FILE *fp,int i,int j){
    char str[19];
    int input=0;
    fscanf(fp,"%s",str);
    while(str[i]!=')'){
        input=input*10+str[i]-48;
        i++;
    }
    a[j]=input;
    printf("%d\n",input);
}

main(){
    int a[7];
    FILE *fp;   
    int i,j=0;
    fp=fopen("input.txt","r");
    if (fp == NULL) {
        fprintf(stderr, "Can't open input file in.list!\n");
        exit(1);
    }
    i=12;

    get(a,fp,i,j);
    j++;
    i=10;
    get(a,fp,i,j);
    j++;
    i=13;
    get(a,fp,i,j);
    j++;
    i=11;
    get(a,fp,i,j);
    i=16;
    get(a,fp,i,j);
    j++;
    i=17;
    get(a,fp,i,j);
    j++;
    i=14;
    get(a,fp,i,j);
}

1 个答案:

答案 0 :(得分:2)

在功能中获取

char str[19];

这意味着您假设读入的每个字符串都将具有最大18个字符。但是您的输入文件包含以下行:

hare_turtle_dist(20)

20 char。这会导致崩溃。

要解决此问题,请将char数组的大小增加到至少21