簡體   English   中英

目標c中的char *數組

[英]array of char * in objective c

我有一個交流字符串,需要它來將其分解成幾行(此刻我不會制作它們的NSString)。 是否有類似NSMutableArray的東西可以放入此char *? 或者如何實現它以從字符串中生成內容,以便以后可以通過索引訪問?

目前我做

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

還是從磁盤讀取文件時更容易做到這一點?

使用NSValue將您的char *存儲在NSMutableArray中

概觀

NSValue對象是單個C或Objective-C數據項的簡單容器。 它可以容納任何標量類型,例如int,float和char,以及指針,結構和對象id。 此類的目的是允許將此類數據類型的項目添加到集合中,例如NSArray和NSSet實例,它們要求它們的元素成為對象。 NSValue對象始終是不可變的。

您不能將C / C ++指針插入NSMutableArray中,除非它被包裝在類似NSValue或其他Objective-C類的容器中。

如果您希望將NSMutableArray轉換為NSString會容易得多。

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

如果您嚴格希望保留在C / C ++領域中,那么您的其他選擇是使用字符串向量或char *數組。

正如其他人已經指出的那樣,要將原始C類型(例如)存儲在Obj-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];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM