将 NSArray 转换为 char** 并返回 c 数组



我需要转换一个填充了NSStrings的NSarray,并将这个c数组返回到函数。

-(char**) getArray{
int count = [a_array count];
char** array = calloc(count, sizeof(char*));
for(int i = 0; i < count; i++)
{
array[i] = [[a_array objectAtIndex:i] UTF8String];
}
return array;     
}

我有这个代码,但是如果我返回东西,我应该什么时候释放内存?

您还需要为数组中的每个字符串分配内存。strdup()会为此工作。 您还需要在数组的末尾添加一个NULL,以便知道它的结尾位置:

- (char**)getArray
{
unsigned count = [a_array count];
char **array = (char **)malloc((count + 1) * sizeof(char*));
for (unsigned i = 0; i < count; i++)
{
array[i] = strdup([[a_array objectAtIndex:i] UTF8String]);
}
array[count] = NULL;
return array;     
}

要释放阵列,您可以使用:

- (void)freeArray:(char **)array
{
if (array != NULL)
{
for (unsigned index = 0; array[index] != NULL; index++)
{
free(array[index]);
}
free(array);
}
}

您返回的数组将在getArray()函数的调用环境中捕获在某个char**标识符中,您可以使用该标识符free在getArray()函数中使用calloc()分配的内存

int main()
{
char **a=getArray();
//use  a as your requirement
free(a);
}

最新更新