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

时间:2012-10-25 08:49:47

标签: 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 objectAtIndex:i] UTF8String];
        }
        return array;     
}

我有这段代码,但如果我要回东西的话,什么时候应该释放内存?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

你返回的

数组将被getArray()函数的调用环境中的一些char**标识符捕获,你可以使用free在getArray()中使用calloc()分配的内存功能

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