在C中,如何创建一个返回字符串数组的函数?还是多维char数组?
例如,我想返回在函数中创建的数组char paths[20][20]
。
我最近的尝试是
char **GetEnv()
{
int fd;
char buf[1];
char *paths[30];
fd = open("filename" , O_RDONLY);
int n=0;
int c=0;
int f=0;
char tmp[64];
while((ret = read(fd,buf,1))>0)
{
if(f==1)
{
while(buf[0]!=':')
{
tmp[c]=buf[0];
c++;
}
strcpy(paths[n],tmp);
n++;
c=0;
}
if(buf[0] == '=')
f=1;
}
close(fd);
return **paths; //warning: return makes pointer from integer without a cast
//return (char**)paths; warning: function returns address of local variable
}
我尝试了各种'设置',但每种设置都有一些错误。
我不知道C是如何工作的
答案 0 :(得分:3)
您无法安全地返回堆栈分配的数组(使用数组[20] [20]语法)。
您应该使用malloc:
创建动态数组char **array = malloc(20 * sizeof(char *));
int i;
for(i=0; i != 20; ++i) {
array[i] = malloc(20 * sizeof(char));
}
然后返回数组
答案 1 :(得分:3)
您应该返回array
(return array;
)。声明后的**
用于解除引用。
另外,请确保在堆上分配此数组的内存(使用malloc
或simillar函数)