gpt4 book ai didi

c - 如何使用 malloc 从函数返回 char 数组

转载 作者:太空宇宙 更新时间:2023-11-04 04:58:42 24 4
gpt4 key购买 nike

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

我设法编写了一个工作函数,它创建了一个包含每个单词的数组(即 arr[0] = "bla", arr[1] = "bla", ...)但是我不能返回这个数组,所以我可以在我的 main() 中使用它。

char* toArray(char *filename) {
int words = countWords(filename); // this function returns the number of words in the file
char *arr[words];
int cur_size = 0;
int i;

FILE *file;
file = fopen(filename, "r");

for(int i = 0; i < words; i++) {
fscanf(file, "%*s%n", &cur_size);
arr[i] = malloc( (cur_size+1) * sizeof(char));
}
fclose(file);

file = fopen(filename, "r");
for (i = 0; i < words; i++) {
fscanf(file, "%s", arr[i]);
printf("%s\n", arr[i]);
}
fclose(file);

return arr; // not sure if this is how i should return it
}


int main(int argc, char const *argv[]) {
char *arr = toArray("file.txt");
printf("%s", arr[0]);

return 0;
}

我以为

 printf("%s", arr[0]) 

打印文件的第一个字。

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

我想我在我的函数中犯了一个错误?

最佳答案

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

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

关于c - 如何使用 malloc 从函数返回 char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58047963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com