我有一个C库,我从iOS Objective-C程序中使用。我的C库的一个功能是读入并处理文件中的数据。目前该功能看起来像这样我应该在C for iOS项目中使用哪种类型的文件名字符串?
internalType* parseFile(const char* filename);
是一个char *传递的文件名类似这样的安全上的iOS还是我拍摄自己的脚使用Unicode?这里有一个首选的做法吗?
我有一个C库,我从iOS Objective-C程序中使用。我的C库的一个功能是读入并处理文件中的数据。目前该功能看起来像这样我应该在C for iOS项目中使用哪种类型的文件名字符串?
internalType* parseFile(const char* filename);
是一个char *传递的文件名类似这样的安全上的iOS还是我拍摄自己的脚使用Unicode?这里有一个首选的做法吗?
很可能UTF-8。为了安全起见,您应该对URL使用CFURLGetFileSystemRepresentation
,对路径使用-[NSString fileSystemRepresentation]
。
是的...... const char *
应该适用于C语言,尤其是当它们匹配您可能调用的C函数时,例如fopen
。
如果您的文件很可能有古怪的非ASCII文件名,虽然,全盘皆输。 :-)在进行Objective C调用时,您会更安全,这些调用需要NSURL
或NSString
对象。
因此,我可以因此称之为:'parseFile([文件名cStringUsingEncoding:NSASCIIStringEncoding]));'? – wxs 2012-01-05 22:58:22
是的,这应该工作。但是,如果文件名中有非古怪的非ASCII字符,则可能会出现意外(和不良)行为。 – 2012-01-05 22:59:37
这就是我的恐惧。我希望的iOS不会让这种情况发生(这将是应用程序包中的文件) – wxs 2012-01-05 23:00:47