c程序编译好,但意外关闭

时间:2017-06-17 14:07:59

标签: c function-pointers

#include<stdio.h>
#include<string.h>
#include<malloc.h>

char *sum(char nn1[],char nn2[]){
    int i,j,s,max=0,c=0,reslen=0;
    max=(strlen(nn2)>strlen(nn1))?strlen(nn2):strlen(nn1);
    char *str=(char*)malloc(max+1);
    char n1[max],n2[max];
    char st[max+1];

    for(i=0;i<max;i++){
        n1[i]='0';n2[i]='0';
    }

    for(i=max-strlen(nn1),j=0;j<strlen(nn1);j++){
        n1[i]=nn1[j];
        i++;
    }

    for(i=max-strlen(nn2),j=0;j<strlen(nn2);j++){
        n2[i]=nn2[j];
        i++;
    }


    for(i=max-1;i>=0;i--){
        s=(n1[i]-'0')+(n2[i]-'0')+c;
        st[i+1]=s%10+'0';
        c=s/10;
    }

    if(c){
        reslen=max+1;
        st[0]='1';
    }else{
        reslen=max;
        for(i=0;i<=max;i++)
            st[i]=st[i+1];
        st[i]='\0';
    }

    for(i=0;i<reslen;i++){
        str[i]=st[i];
    }

    if(strlen(str)!=reslen){
        str[reslen]='\0';
    }


    return str;

}

int main()
{
    unsigned int n,i;
    scanf("%d",&n);
    char *s0=sum("0","0");
    char *a[n];
    a[n]=malloc(10000);
    for(i=0;i<n;i++)
        scanf("%s",a[i]);

    for(i=0;i<n;i++)
        s0=sum(s0,a[i]);

    printf("%s",s0);

    return 0;
}

上述计划意外结束。我在gcc中运行这个程序,先扫描没有。输入然后以字符串格式扫描数字,然后执行求和功能。请修正错误。

sum函数在main函数中没有scanf()时正常工作,但在与scanf()一起使用时会关闭。

1 个答案:

答案 0 :(得分:2)

a未正确分配 您应该在使用scanf

输入输入之前在循环中分配它
a[n]=malloc(10000);// remove this statement, a[n] is out of bound too

for(i=0;i<n;i++)
{
    a[i] = malloc(10000); // allocate inside loop
    scanf("%s",a[i]);
}