我有一個c字符串,需要它將它分解成行(我不會在此刻創建它們的NSString)。 有沒有像我可以把這個char *的NSMutableArray的東西? 或者我怎樣才能實現它從字符串中創建我可以通過索引訪問的內容?在目標c中的char *數組
目前我做
char *cline = strtok(data, "\n");
while(cline)
{
...
}
或者是更容易待辦事項這個時候我從磁盤中讀取文件?
我有一個c字符串,需要它將它分解成行(我不會在此刻創建它們的NSString)。 有沒有像我可以把這個char *的NSMutableArray的東西? 或者我怎樣才能實現它從字符串中創建我可以通過索引訪問的內容?在目標c中的char *數組
目前我做
char *cline = strtok(data, "\n");
while(cline)
{
...
}
或者是更容易待辦事項這個時候我從磁盤中讀取文件?
使用NSValue來存儲你的char *在一個NSMutableArray
概述
一個NSValue對象是單一的C或Objective-C的數據項的簡單容器。它可以包含任何標量類型,如int,float和char,以及指針,結構和對象標識符。此類的目的是允許將這些數據類型的項添加到集合中,例如NSArray和NSSet的實例,這些集合要求它們的元素是對象。 NSValue對象總是不可變的。
您不能將C/C++指針插入到NSMutableArray中,除非它包裝在像NSValue或其他Objective-C類的容器中。
如果你想要一個NSMutableArray,把它轉換成一個NSString就會容易多了。
NSArray* strings = [[NSString initWithCString:data encoding:NSUTF8StringEncoding] componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]];
您的其他選擇,如果您嚴格想要留在C/C++領域將有一個字符串或char *數組的向量。
正如其他人已經指出的,爲了將諸如a之類的原始C類型存儲在諸如NSMutableArray
的實例之類的Obj-C對象中,您需要首先將它們包裝在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];
我測試了這個。它不起作用。試試NSString * string = [NSString stringWithFormat:@「%@」,str]; – Frank 2014-02-06 04:02:39
你可以在普通的C使用任何類型的,你可以在Objective-C使用。 – 2013-03-13 20:22:48
而且你可以使用NSPointerArray。或者有一個非對象的封裝對象,其名稱我現在不記得。 (啊,是--NSValue。) – 2013-03-13 20:27:20
你可以使用NSValue,但是來回轉換char會產生很多開銷。爲什麼不用calloc使用c指針並在需要時增加數組呢?不幸的是沒有Obj-c容器可以存儲原始的c類型。 – HermioneGreen 2013-03-13 20:28:27