我有一个 iOS 项目,我在其中使用了一些 C 源。在 C 部分中,我需要主包中文件的路径。我如何在不使用 Obj-C 的情况下获得它?
基本上我希望通过以下方式返回路径:
NSLog(@"%s",[[[NSBundle mainBundle] pathForResource:@"myfile" ofType:@"txt"] fileSystemRepresentation]);
我有一个 iOS 项目,我在其中使用了一些 C 源。在 C 部分中,我需要主包中文件的路径。我如何在不使用 Obj-C 的情况下获得它?
基本上我希望通过以下方式返回路径:
NSLog(@"%s",[[[NSBundle mainBundle] pathForResource:@"myfile" ofType:@"txt"] fileSystemRepresentation]);
所以只需像上面那样获取路径,然后获取 C 字符串版本:
NSString *path = [[[NSBundle mainBundle] pathForResource:@"myfile" ofType:@"txt"] fileSystemRepresentation];
char *cPath = [path cStringUsingEncoding:UTF8StringEncoding];
只要注意文档中的警告并复制字符串,如果您打算将其挂在您所在的方法/函数的末尾之外:
保证返回的 C 字符串仅在接收器被释放或当前自动释放池被清空之前有效,以先发生者为准。您应该复制 C 字符串或使用 getCString:maxLength:encoding: 如果它需要存储超过此时间的 C 字符串。
更新:如果由于某种原因你不能使用 Foundation,你可以使用 Core Foundation 做类似的事情。您可以调用CFBundleCopyResourceURL()
(或其表亲之一)来获取资源的 URL,然后使用CFURLCopyPath()
.
最好使用objective-c 读取路径,并通过调用函数将其作为char * 传递给c 类。
您还可以分配一个全局变量 char *,它对 Objective-c 和 C 都是可见的。