如何使用malloc从函数返回字符数组
我正在尝试编写一个函数,读取一个文本文件,并将该文本的每个单词放入一个具有动态分配的数组中,这样该数组就不会过大 我设法编写了一个工作函数,用每个单词创建一个数组(即arr[0]=“bla”,arr[1]=“bla”,…),但我无法返回此数组,因此我可以在main()中使用它如何使用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; 文
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
的返回类型似乎是错误的。我得到了“从不兼容指针类型返回returnarr
”,我应该返回*arr
?由于数组由*char
字符串组成,因此需要将函数返回类型更改为char**