如何使用malloc从函数返回字符数组

如何使用malloc从函数返回字符数组,c,arrays,malloc,C,Arrays,Malloc,我正在尝试编写一个函数,读取一个文本文件,并将该文本的每个单词放入一个具有动态分配的数组中,这样该数组就不会过大 我设法编写了一个工作函数,用每个单词创建一个数组(即arr[0]=“bla”,arr[1]=“bla”,…),但我无法返回此数组,因此我可以在main()中使用它 char*toArray(char*filename){ int words=countWords(filename);//此函数返回文件中的字数 char*arr[字]; int cur_size=0; int i; 文

我正在尝试编写一个函数,读取一个文本文件,并将该文本的每个单词放入一个具有动态分配的数组中,这样该数组就不会过大

我设法编写了一个工作函数,用每个单词创建一个数组(即arr[0]=“bla”,arr[1]=“bla”,…),但我无法返回此数组,因此我可以在main()中使用它

char*toArray(char*filename){
int words=countWords(filename);//此函数返回文件中的字数
char*arr[字];
int cur_size=0;
int i;
文件*文件;
file=fopen(文件名为“r”);
for(int i=0;i
我预料

printf(“%s”,arr[0])
打印文件的第一个字

但是我得到了这个错误: 格式“%s”要求参数类型为“char*”,但参数2的类型为“int”[-Wformat=]printf(“%s\n”,arr[0])

我想我的函数出错了?

您的代码:

 char *arr = toArray("file.txt");

在本例中,
arr
是一个字符串,而不是字符串数组!因此,
arr[0]
只是一个字符,而不是字符串。单个字符基本上被视为int。

您的数组是本地的,我们需要动态声明它。请尝试下面的示例代码

char **arr = NULL;
arr = (char**)malloc(words*sizeof(char*))
/* then use it */
return arr;

谢谢大家的回答! 我设法做到了

我将函数返回类型更改为
char**
我将内存动态分配给阵列,如下所示:
arr=(char**)malloc(words*sizeof(char))

然后,当我关心的时候,它在我的主要工作
char**arr=toArray(“file.txt”)

即使动态分配数组
arr
中的元素,数组
arr
本身也不会动态分配。返回它将返回指向局部变量的指针,该局部变量将在函数返回后立即停止存在。更重要的是,您有一个指针数组,它永远不会等于类型
char*
,但是动态分配可以是类型
char**
。因此,如果我像char*arr=malloc(sizeof(char)*numberOfChar)这样动态分配我的arr本身)应该更好?我现在这样把内存分配给我的
arr
char*arr=malloc(numberOfChar*sizeof(char))但现在我的元素分配出现了问题:
arr[i]=malloc((cur\u size+1)*sizeof(char))
assignment从指针生成整数而不进行强制转换我不知道为什么会发生这种情况。您似乎想要的是一个字符串数组。“字符串”可以看作是
char*
。数组可以看作是指向其(第一个)元素的指针。因此,如果您有一个
char*
数组,您需要一个指向
char*
的指针,它原来是一个
char**
。现在,对于如何分配它,您在问题中展示的代码部分地解决了问题。这只是问题的一部分。OP正在尝试返回字符串数组,修复其
main
例程以处理一个字符串将无法完成此操作。将文本作为答案输入是为了获得答案,而不是提示。感谢您的回答,但我不知道我在函数中犯了什么错误。我的数组类型定义是问题所在吗?或者这只是我分配内存的方式吗?我尝试过,但是
arr
的返回类型似乎是错误的。我得到了“从不兼容指针类型返回return
arr
”,我应该返回
*arr
?由于数组由
*char
字符串组成,因此需要将函数返回类型更改为char**