如何将c风格的char *数组转换为NSArray?

时间:2012-01-03 05:24:27

标签: objective-c cocoa

A.H:

-(NSArray *) returnarray:(int) aa
{
  unsigned char arry[1000]={"aa","vv","cc","cc","dd"......};
  NSArray *tmpary=arry;
  return tmpary;
}

交流转换器:

#include "a.H"
main (){
  // how do I call returnarray function to get that array in main class
}

我需要在main中使用该数组,我需要在单独的类中保留该数组函数。

有人可以提供代码示例来执行此操作吗?

3 个答案:

答案 0 :(得分:4)

这些行:

unsigned char arry[1000]={"aa", "vv", "cc", "cc", "dd", ...};
NSArray *tmpary=arry;

应改为:

unsigned char arry[1000]={"aa", "vv", "cc", "cc", "dd", ...};
NSMutableArray * tmpary = [[NSMutableArray alloc] initWithCapacity: 1000];
for (i = 0; i < 1000; i++)
{
    [tmpary addObject: [NSString stringWithCString: arry[i] encoding:NSASCIIStringEncoding]];
}

这是因为C风格的数组(例如,int arr[10];)与实际的NSArray对象不同,后者声明如上。

事实上,根据文档中的定义,我们不知道NSArray实际上是什么,除了您可以使用的方法之外。这与C风格的数组形成鲜明对比,你可以保证它只是一个连续的内存块,大小足以保存你请求的元素数量。

答案 1 :(得分:1)

C风格的数组不是NSArray,所以你的arry(其定义有一些拼写错误,至少是unsighned部分)的分配是无效的。另外,你调用arry一个char的数组,但你给它分配了一个以空字符结尾的字符串数组。

通常,您需要循环并将C样式数组的所有元素添加到NSArray。

答案 2 :(得分:0)

我不确定你为什么必须在主要的地方做这件事。如果您想要全局,可以通过在另一个文件中声明全局来实现。也就是说,你不能将普通的C数据阵列分配给目标C NSArray,它本质上是完全不同的。