使用malloc作为递归函数,每次调用函数时都会获得不同大小的内存

时间:2018-05-03 09:23:09

标签: c arrays recursion malloc

我正在尝试实现一个功能

int array(char *str, int length) 

调用字符数组,并仅将特定元素复制到另一个数组上,该数组的长度必须与原始str数组的长度相同。

但是这个函数需要递归,我没有办法声明这个'复制'数组,

因为我做了

char copied(length); 

在函数内部,

当函数递归调用自身时,每次运行都会重置数组。

我限制了另一个以长度为变量的函数,所以这不是一种方法。

struct variables {
    int counter;
    char bra[500];
    int maxb;
    int findtheking[500];
    int numoright;
};

struct variables mat = { 0, '\0', 0 , 0, 0 };

int matches(char* str, int len) {
    if (mat.counter >= strlen(str)) {
        if (mat.bra[strlen(str)-1] == '(') {
            mat.counter = 0;
            mat.bra[0] = '\0';
            return 0;
        }
        else if (mat.bra[strlen(str)-1]  == '0') {
            mat.counter = 0;
            mat.bra[0] = '\0';
            return 1;
        }


    }
    else {
        if (str[mat.counter] == '(') {
            mat.bra[len-1] = str[mat.counter];
            mat.counter++;
            matches(str, len - 1);

        }
        else if (str[mat.counter] == ')') {
            if (mat.bra[len] == '(') {
                mat.counter++;
                mat.bra[len] = '0';
                matches(str, len + 1);
            }
            else {
                mat.counter = 0;
                mat.bra[0] = '\0';
                return 0;
            }
        }
        else {
            mat.counter++;
            matches(str, len);
        }
    }
}

这是我为CS HW制作的功能,已经完成并提交。

它接受一串字符,并检查括号是否正确匹配。

此代码位于func.c中,并从main.c获取str。

  • 我只能使用递归方式,不能用于/ while循环。

为了解决这个问题,我使用这个函数在字符串中找到括号,如果找到'(',则函数将它放在一个名为mat.bra的数组中,我将其设置为500,因为我找不到一种使mat.bra具有'len'大小的方法。

此代码不适用于超过500个元素的字符串,所以我想知道是否有办法使mat.bra size'len'不用担心str上的字符总数。

0 个答案:

没有答案