2016-05-30 83 views
0

我有我的執行文件中定義的,像這樣的NSString靜態數組:獲取靜態數組c的目標C的長度

NSString * const knames[] = { @"", @"", @"", ..., @"" }; 

什麼,我想做的就是長度動態。由於這是一個C數組,lengthcount是無效的,所以我一直在使用sizeof嘗試:

int count = (sizeof knames)/(sizeof knames[0]); 

然而,它導致錯誤信息:Invalid application of 'sizeof' to an incomplete type 'NSString *const _strong[]'有什麼建議?

+0

我不熟悉Objective C的只有C.但將這項工作的sizeof(* knames)因爲knames是一個指針數組? –

+0

@TobiasJohansson偉大的建議!這實際上使錯誤消息消失,但產生不正確的結果:) – smaili

回答

0

小錯字; sizeof需要括號:

/*const?*/ int count = sizeof(knames)/sizeof(knames[0]); 

您可以創建一個全球宏觀地方:

#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) 
... 

const int count = ARRAY_SIZE(knames); 
+0

仍然導致相同的錯誤消息 – smaili

+0

@smaili我不明白爲什麼你仍然收到錯誤。請檢查您輸入的內容是否正確。但是,錯誤消息的「不完整類型」位是一條線索。你確定它的範圍? – trojanfoe

+0

這回答了發佈的問題,但要小心。 ARC不會記憶管理保存到C數組中的對象。發佈的代碼@smaili將工作,因爲所有的字符串都是靜態定義的。如果您嘗試將動態創建的字符串放入C數組中,則數組中的引用將爲__unsafe_unretained,這意味着它不會保留對象的所有權,如果對象被釋放,也不會將其設置爲nil。使用字符串對象的NSArray會更好。 –