如何在c中将数组从函数“返回”到main

时间:2014-05-04 04:01:03

标签: c arrays function main

我想将数组索引从我的函数传递给main。我怎样才能做到这一点? 例如:

void randomfunction()
{
    int i;
    char k[20][10];
    for (i=0;i<20;i++)
        strcpy(k[i], "BA");
}
int main(int argc, char *argv[])
{
    int i; for (i=0;i<20;i++) printf("%s",k[i]);
    return 0;
}

我知道对你来说这很简单,但我发现了类似的话题,对我来说太复杂了。我只想将k数组传递给main。当然我的目的不是用“BA”字符串填充它......

3 个答案:

答案 0 :(得分:2)

您想要动态分配内存。像这样:

char** randomfunction() {    
    char **k=malloc(sizeof(char*)*20);
    int i;

    for (i=0;i<20;i++)
        k[i]=malloc(sizeof(char)*10);

    //populate the array

    return k;    
}

int main() {
    char** arr;
    int i;

    arr=randomfunction();

    //do you job

    //now de-allocate the array
    for (i=0;i<20;i++)
        free(arr[i]);        
    free(arr);

    return 0;
}

请参阅mallocfree

答案 1 :(得分:2)

这是另一种选择。这是有效的,因为struct可以被复制,与数组不同。

typedef struct 
{
    char arr[20][10];
} MyArray;

MyArray random_function(void)
{
    MyArray k;
    for (i=0;i<sizeof k.arr / sizeof k.arr[0];i++)
       strcpy(k.arr[i], "BA");
    return k;
}

int main()
{
     MyArray k = random_function();
}

答案 2 :(得分:1)

最简单的方法:

void randomfunction(char k[][10])
{
    // do stuff
}

int main()
{
    char arr[20][10];
    randomfunction(arr);
}

如果randomfunction需要知道维20,您可以将其作为另一个参数传递。 (由于历史原因,将它放在[]中并不起作用。)