2012-01-03 105 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的所有元素。