C从函数返回char数组

时间:2017-11-26 04:06:08

标签: c arrays char return

基本上我正在做的是创建一个我可以构建其他程序的基本程序,并且我有一个函数(称为输入),它返回从用户输入收集的字符。现在,有2个错误说" return在没有强制转换的情况下生成整数"和"函数返回局部变量"的地址。我希望它能够做的是返回一个字符数组。

以下是代码:

#import <stdio.h>

void cls() {
    system(cls);
}

char input() {
    char X[0];
    int Y = 0;
    char Z;
    while (1 == 1) {
        Y = Y + 1; //increment step
        Z = getch(); //get character input
        if (Z == ';') {
            break;
        } //break if stop character is pushed
        char Q[Y];
        int a;
        for (a = 0; a < Y; a = a + 1) {
            Q[a] = X[a];
        } //pass the items of X to the larger Q array
        Q[Y] = Z; //add new value to Q at end of array
        char X[Y];
        int b;
        for (b = 0; b < Y + 1; b = b + 1) {
            X[a] = Q[a];
        } //pass the items of Q back to a larger X
        printf(X);
    }
    return X;
}

int main() {
    while (1 == 1) {
        //stuff will go here later
    }
    return 0;
}

2 个答案:

答案 0 :(得分:0)

数组中的数组不是第一类,因此不能从函数中返回它们,也不能将它们作为参数传递给函数。你需要传递/返回指针。但是,由于指针必须指向一些东西(有用),你需要跟踪谁“拥有”指针指向的内容 - 谁负责分配并释放所涉及的记忆。

所以说,有几种方法可以管理传递和返回(指向)数组。

  • 您可以让调用者分配一个数组(在堆栈或堆上),并将指针(和大小)传递给一个将填充它的函数。在这种情况下调用的函数不必担心分配和释放数组,但确实需要担心不会溢出它。

  • 您可以让被调用者在堆上分配一个数组并返回一个指向调用者的指针。你不能用被调用堆栈分配的内存来做这个,因为当被调用者返回时释放所有被调用堆栈分配的内存,所以如果你试图返回一个指向它的指针,指针就会悬空。堆分配的数组避免了这个问题,但意味着调用者需要释放它,并且还有一个额外的困难,即调用者不知道分配的数组有多大,除非你返回一个包含该信息的结构和指针,或以某种方式将该信息传达给来电者。

答案 1 :(得分:0)

您应该执行以下操作:

  

错误说&#34; return在没有强制转换的情况下生成整数&#34;

将函数input的返回类型从char更改为char *

  

错误说&#34;函数返回局部变量的地址&#34;

我的变量X返回的内存应该分配dynamically,即使用callocmalloc函数。因为在提供的代码中,内存保留我的变量X是本地的并且存在于stack中。所以当函数调用从

返回时