我的应用程序中有以下代码:
static void foo(CFStringRef str)
{
CFStringEncoding encoding = CFStringGetSystemEncoding();
const char * cString = CFStringGetCStringPtr(str, encoding);
//.....
}
它自iOS 5以来一直存在,并且始终有效。
自iOS 7发布以来,CFStringGetCStringPtr
返回NULL
。
添加以下代码已经解决了它:
if (cString==NULL)
{
cString = [
((NSString *)str) cStringUsingEncoding:[NSString defaultCStringEncoding]
];
}
不过,我想知道是否有人知道导致问题的原因是什么?
答案 0 :(得分:2)
不保证CFStringGetCStringPtr()返回非NULL。从文档(强调添加):
此函数是否返回有效指针或NULL取决于许多因素,所有因素都取决于字符串的创建方式及其属性。 此外,函数结果可能会在不同版本之间和不同平台上发生变化。因此,在任何情况下都不要指望从此函数接收非NULL结果。
总是有CFStringGetCString()的回退,但更好的是,使用Objective-C和NSString的帮助方法(例如UTF8String)。