[英]C - Returning an array from a function
我正在尝试创建一个函数,该函数以C语言返回一个字符串数组。我在网站上查看了其他一些问题,并尝试了一些解决方案,但似乎没有任何效果。 我试过(1)只是简单地更改函数以更改数组内容而不是返回它,并且我试过(2)显式地返回arrayz,但似乎都不起作用。 方法#1:在一个文件中,该函数:
int getArray(int num, char** array)
{
int i;
for (i = 0; i < num; i++)
array[i] = "whatever";
return 0;
}
在另一个文件中,我调用该函数:
char** array = malloc(sizeof(char*) * num));
getArray(num, files);
当我尝试打印阵列文件的内容时,什么都没有显示。 方法2:在一个文件中,该函数:
char** getArray(int num)
{
int i;
char** array = malloc(sizeof(char*) * num));
for (i = 0; i < num; i++)
array[i] = "whatever";
return array;
}
在另一个文件中,我调用该函数:
char** files = getArray(num);
同样,当我尝试打印文件内容时,什么也没有显示。
我已经检查过,并且在其中定义getFiles()
的头文件已包含在进行调用的文件中。 我不确定发生了什么。
您将数组命名为“数组”,而不是“文件”:
char** array = malloc(sizeof(char*) * num));
getArray(num, files);
尝试
getArray(num, array);
char** array = malloc(sizeof(char*) * num));
在这里,您为num
char指针分配内存,但不存储num
字符串。 您还需要为字符串分配内存。 即“无论存储什么”。
而且你不能分配一个字符串,
array[i] = "whatever";
你应该用
strcpy(array[i],"whatever");
您实际上需要为字符串分配空间。 您只是为指向字符串的指针分配内存。 在您提供的示例中,您可以使用strdup
为任何字符串分配空间。 像这样:
int getArray(int num, char** array)
{
int i;
for (i = 0; i < num; i++)
array[i] = strdup("whatever");
return 0;
}
我不知道你想做什么。 但是我想你就是这样。
#include <stdio.h>
char** getArray(int num)
{
int i;
char** array = malloc(sizeof(char*) * num);
char* whatever = "whatever";
for (i = 0; i < num; i++)
{
array[i] = whatever;
// array[i][0] = '0' + i;//Comment out because "whatever" is now constant that is immutable. So you can't change it.
}
return array;
}
main(){
char** arr;
int i;
arr = getArray(10);
for(i=0; i<10; i++)
{
printf("addr=%d, val=%s\n",arr[i], arr[i]);
}
}
输出:
addr=39075716, val=whatever
addr=39075716, val=whatever
addr=39075716, val=whatever
addr=39075716, val=whatever
addr=39075716, val=whatever
addr=39075716, val=whatever
addr=39075716, val=whatever
addr=39075716, val=whatever
addr=39075716, val=whatever
addr=39075716, val=whatever
这个可以吗? 在上述情况下, arr[i]
是只读的,仅指向一个存储空间。 有时这是非常有效的内存。
但我认为您想这样做。
#include <stdio.h>
char** getArray(int num)
{
int i;
char** array = malloc(sizeof(char*) * num);
char* whatever;
for (i = 0; i < num; i++)
{
whatever = malloc(sizeof(char) * (strlen("whatever")+1));
strcpy(whatever, "whatever");//Now you can change "whatever". Because you created new readable-writable memory space by using malloc.
array[i] = whatever;
array[i][0] = '0' + i;//Now You can change array[i].
}
return array;
}
main(){
char** arr;
int i;
arr = getArray(10);
for(i=0; i<10; i++)
{
printf("addr=%d, val=%s\n",arr[i], arr[i]);
}
}
输出:
addr=-356501104, val=0hatever
addr=-356501088, val=1hatever
addr=-356501072, val=2hatever
addr=-356501056, val=3hatever
addr=-356501040, val=4hatever
addr=-356501024, val=5hatever
addr=-356501008, val=6hatever
addr=-356500992, val=7hatever
addr=-356500976, val=8hatever
addr=-356500960, val=9hatever
现在您可以更改arr[i]
因为您使用了malloc并为新字符串(“ xhatever”)创建了内存空间。
希望对您有所帮助。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.