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

Objective c 将NSArray转换为char**并返回c数组,objective-c,c,arrays,Objective C,C,Arrays,我需要转换一个填充了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 objectAtInde

我需要转换一个填充了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;     
}
-(char**)getArray{
int count=[a_数组计数];
char**array=calloc(count,sizeof(char*));
for(int i=0;i

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

您返回的数组将在getArray()函数的调用环境中被捕获到一些
char**
标识符,使用该标识符,您可以
释放
使用
calloc()
在getArray()函数中分配的内存


您还需要为数组中的每个字符串分配内存<代码>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;     
}

你想释放哪个内存?数组?在getArray定义中缺少括号(),对吗?这里有很多东西不清楚。。什么是_数组?如果将字符放入数组[i],那么还必须为每个数组[i]分配内存,这样释放就超出了函数的范围。在objective-c中花了太多时间,以至于我忘记了c中的所有内容…是的,您可以释放外部,因为外部标识符本身指向堆上使用calloc分配的相同内存…getArray函数应该更改为-(char**)getArray:(NSArray*)a_array{}以传入数组名称
- (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);
    }
}