【问题标题】:How to return char *arr[] with variable length in C? [duplicate]如何在 C 中返回可变长度的 char *arr[]? [复制]
【发布时间】:2021-05-06 20:50:52
【问题描述】:

我想重构一个函数,以便可以将它用于不同长度的数组,并返回新创建的数组,以便其他函数可以访问它。我不能使数组静态,因为你不能有动态长度的静态数组。我也不能使用全局结构,因为它需要占用数组的长度,而且我认为必须进行硬编码。 所以问题是是否有可能做这样的事情:

char* splitElementsArr(FILE* file){
    int length = countBlankLines(file);
    char *arr[length] // or maybe use malloc here

    ...Some operations to fill array

    return arr;

【问题讨论】:

  • 你确定它需要是指针数组,而不是char数组吗?
  • 但差异对答案影响不大。
  • @Barmar 是的,它是一个字符串数组
  • @Barmar 该函数假定将文件分割成块,所以我并不惊讶它返回一个指针数组。
  • @xhienne 好点。让我感到困惑的是,数组的大小是根据文件长度来确定的。但我想这只是一个上限。

标签: arrays c dynamic


【解决方案1】:

不,你不能。您正在返回一个指向在堆栈上动态分配的本地数据的指针。一旦您返回,这些数据就不再存在。

解决方案:使用malloc()

【讨论】:

  • 然后在整个程序结束时调用free()?
  • 当您不再需要这些数据时,您可以致电free()。每个malloc() 一个free()
  • 您还需要释放所有arr[i]。 @菲尔
  • @Phil 在free(arr) 之前做所有free(arr[i]) :-)
猜你喜欢
  • 1970-01-01
  • 2023-03-06
  • 2015-06-08
  • 2013-05-16
  • 2011-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多