2016-05-30 34 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会更好。 –