1

私はAC文字列を持っていて、それを行に分割する必要があります(現時点ではそれらのNSStringを作成しません)。この char * を入れることができる NSMutableArray のようなものはありますか? または、後でインデックスでアクセスできる文字列から何かを作成するにはどうすればよいですか?

現在私が作っている

char *cline = strtok(data, "\n");
            while(cline)
            {
...
}

または、ディスクからファイルを読み取るときにこれを行う方が簡単ですか?

4

3 に答える 3

2

NSValue を使用して char* をNSMutableArrayに格納します

概要

NSValue オブジェクトは、単一の C または Objective-C データ項目の単純なコンテナーです。int、float、char などのスカラー型のほか、ポインター、構造体、オブジェクト ID を保持できます。このクラスの目的は、要素がオブジェクトである必要がある NSArray や NSSet のインスタンスなどのコレクションに、このようなデータ型のアイテムを追加できるようにすることです。NSValue オブジェクトは常に不変です。

于 2013-03-13T20:22:42.587 に答える
1

他の人がすでに指摘しているように、のインスタンスなどのObj-CオブジェクトにaなどのプリミティブC型を格納するには、最初にそれらをオブジェクトNSMutableArrayでラップする必要があります。NSValue

これを行う代わりに、Obj-Cで純粋なC文字列を操作する場合は、CとObjective-Cのソースコードを自由に組み合わせることができることを忘れないでください。通常のC配列を使用することは完全に正当なソリューションです。それも。

値をobj-c配列にラップすることで、境界チェックと可変性が得られますが、値をアンラップしてC文字列として機能させる場合は、最初から単純な古いC文字列を使用する方がよい場合があります。オーバーヘッドを節約します。

次にNSStringを作成する場合は、次のようにNSString便利なメソッドを使用できます。stringWithFormat:

char str[50];

// read characters into the buffer from a file...

// When done, convert to an NSString:
NSString *string = [NSString stringWithFormat:@"%s", str];
于 2013-03-20T02:11:24.833 に答える
1

NSValue やその他の Objective-C クラスのようなコンテナにラップされていない限り、C/C++ ポインタを NSMutableArray に挿入することはできません。

NSMutableArray が必要な場合は、それを NSString に変換する方がはるかに簡単です。

NSArray* strings = [[NSString initWithCString:data encoding:NSUTF8StringEncoding] componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]];

厳密に C/C++ 領域にとどまりたい場合の他のオプションは、文字列のベクトルまたは char* の配列を持つことです。

于 2013-03-13T20:28:52.743 に答える