Objective c 在C for iOS项目中,我应该使用什么类型的文件名字符串?

Objective c 在C for iOS项目中,我应该使用什么类型的文件名字符串?,objective-c,c,string,Objective C,C,String,我在iOS Objective-C程序中使用了一个C库。我的C库的一个函数读取并处理文件中的数据。目前,该函数看起来像这样 internalType* parseFile(const char* filename); 在iOS上这样安全地为文件名传递char*,还是我用unicode攻击自己的脚?这里有首选的做法吗?是的constchar*应该可以很好地用于C语言,尤其是当它们与您可能要调用的C函数相匹配时,例如 但是,如果您的文件可能具有古怪的非Ascii文件名,则所有赌注都是无效的。:-)

我在iOS Objective-C程序中使用了一个C库。我的C库的一个函数读取并处理文件中的数据。目前,该函数看起来像这样

internalType* parseFile(const char* filename);

在iOS上这样安全地为文件名传递char*,还是我用unicode攻击自己的脚?这里有首选的做法吗?

是的
constchar*
应该可以很好地用于C语言,尤其是当它们与您可能要调用的C函数相匹配时,例如


但是,如果您的文件可能具有古怪的非Ascii文件名,则所有赌注都是无效的。:-)您可以更安全地执行Objective C调用,这些调用使用
NSURL
NSString
对象。

很可能是UTF-8。为了安全起见,您应该对URL使用
CFURLGetFileSystemRepresentation
,对路径使用
-[NSString fileSystemRepresentation]

因此我可以这样称呼它:
parseFile([filename cStringUsingEncoding:NSASCIIStringEncoding])?是的,应该可以。但同样,如果文件名中有古怪的非ASCII字符,则可能会出现意外(和不良)行为。这正是我担心的。我希望iOS不会让这种情况发生(这将是应用程序包中的一个文件),如果它是应用程序包中的一个文件(经过代码签名,只有您可以修改或更改),那么我会说您是安全的。