2012-01-03 108 views
3

A.H:如何将c样式char *数组转换为NSArray?

-(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 
} 

我需要在主数组和我需要保留在单独的类该阵列的功能。

是否有人可以提供一个代码示例来做到这一点?

+1

很明显,你没有尝试编译这个例子。我已经清理了一下你的代码。 – 2012-01-03 05:41:20

+0

好的,让我试着去清除你。假设我有一个数组像NSArray * tmparry = {“aa”,“vv”,“cc”,“cc”,“dd”,“de”.......};它包含1000个值,我想在其他类中创建该函数类的对象,并希望在其他类中的所有数组值...所以现在请告诉我,如果你清楚了。在此先感谢所有响应 – Waqar 2012-01-03 07:11:59

回答

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

请注意'stringWithCString:'已弃用。您应该使用其他方法之一从C字符串创建NSString。 – 2012-01-03 06:25:42

+1

谢谢@Peter。我的意思是回来并更新。它已被编辑。 – 2012-01-03 06:53:25

+0

这不应该是错误的? unsigned char arry [1000] = {“aa”,“vv”,“cc”,“cc”,“dd”,...}; C中的一个字符串是char *,并且有一个字符串数组是char **。 arry []的类型仅为arry *。 – 2015-03-19 08:10:12

0

我不知道为什么你必须去做主。如果你想要一个全局,你可以通过在另一个文件中声明一个全局来完成。也就是说,你不能将一个普通的C数据数组分配给一个完全不同的目标C NSArray。

+0

当然可以'转换'一个普通的C数据数组。不过,你不能强迫它。 – 2012-01-03 05:38:19

1

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

一般来说,你需要循环,并添加C数组到的NSArray的所有元素。