c程序编译正常但意外关闭

标签 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() 一起使用时它会关闭。

最佳答案

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]);
}

关于c程序编译正常但意外关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44605565/

相关文章:

c - 我的程序运行正常,但收到警告

javascript - 为什么当我通过 jQuery 将函数附加到回调时,我传递给函数的 functionToCallOnOk 没有被调用?

c - -fopenmp 提供什么预处理器定义?

c - 这段代码的作用是什么以及使用的每个符号的含义是什么?使用的语言是C,我只是编码的初学者

c - C 中最快的 fgets 实现

c - union 和结构打包问题

c++ - nullptr 是否用于终止 C 风格的字符串?

c - ISO C Void * 和函数指针

c - 通过使用函数指针与可变参数列表函数接口(interface)

c++ - 通过模板传递函数时推断的返回类型