2012-01-03 16 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; 
} 

a.c:

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

Iは主にそのアレイを必要と私は別のクラスでは、その配列の機能を保持する必要があります。

誰かがこれを行うコード例を提供してもらえますか?

+1

この例をコンパイルしようとしていないことは明らかです。あなたのコードをちょっと整理しました。 –

+0

あなたをクリアしようとしましょう。 NSArray * tmparry = {"aa"、 "vc"、 "cc"、 "cc"、 "dd"、 "de" .......}のような配列を持っているとします。それは1000の値が含まれていると私は他のコールassでその関数のクラスのオブジェクトを作成し、他のクラスのすべての配列の値をしたいと思うので...今あなたがクリアしている場合私に教えてください..すべての応答のために事前に感謝 – Waqar

答えて

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:'は非推奨です。他のメソッドの1つを使用して、C文字列からNSStringを作成する必要があります。 –

+1

ありがとう@Peter。私は戻ってそれを更新するつもりだった。それは編集されました。 –

+0

これは間違っていませんか? unsigned char arry [1000] = {"aa"、 "vv"、 "cc"、 "cc"、 "dd"、...}; CのStringはchar *で、文字列の配列はchar **です。 arry []の型はarry *のみです。 –

0

なぜあなたはメインでそれをしなければならないのか分かりません。グローバルが必要な場合は、別のファイルにグローバルを宣言することでそれを行うことができます。つまり、無意味なCデータ配列を目的のC NSArrayに割り当てることはできません。これは、性質がまったく違っています。

+0

プレーンなCデータ配列を '変換'します。あなたはそれを強要することはできません。 –

1

Cスタイルの配列はNSArrayのものではないので、arry(定義にはいくつかのタイプミスがあり、少なくともunsighnedの部分があります)の割り当ては無効です。さらに、arryを配列charと呼びますが、nullで終了する文字列の配列を割り当てます。

一般に、Cスタイルの配列のすべての要素をループしてNSArrayに追加する必要があります。

関連する問題