你如何将一个char数组传回C中的main?

时间:2016-10-22 23:18:35

标签: c arrays function

我试图从我创建的函数中传输一个数组,输入一个char和一个short的数组,复制在下面

    char transl [] (char **x, short num){
    char newword []  = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    short num = num;
    FILE * wd;
    wd  = fopen(argv[1], "r");
    short w=0;
    short arrayle=sizeof(x);
    if (arrayle>9){
    while((c = getchar() != '\n') && c != EOF);
    }
    while(((c = fgetc(wd)) != EOF)&& (num>=1)) {
    if (c == ' ') {
    num--;
    }
    if (num == 1) {
    newword [w] = ((c = fgetc(wd)));
    w++;       
    }
    }
    fclose(wd);
    return newword;
    }

我按以下方式将set size数组返回main。

     char newDay [32];
     newDay  = transl (engw, daynum);

我收到以下错误:

assignment to expression with array type

我在Stack上读到我必须传回一个指向数组的指针,但是如果没有数组本身被传回,那么指针在主中是无效的吗?

无论如何,非常困惑。请提前告知,并提前多多谢谢你!

1 个答案:

答案 0 :(得分:1)

为了从函数传回一个数组,你需要做两件事之一:

  • 在静态内存中分配数组 - 此方法仅适用于单线程系统,且仅适用于不需要重入的情况
  • 在动态内存中分配数组 - 这对重入或并发没有限制,但是调用者需要释放他们收到的内存以避免内存泄漏。

以下是第二种方法的示例:

char *newword = malloc(30);
memset(newword, 0, 30);
...
return newword;

您的函数的调用者需要调用

free(resultOfCall);

完成处理返回的数组后。