3

我的应用程序中有以下代码:

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]
    ];
}

不过,我想知道是否有人知道导致问题的原因?

4

1 回答 1

2

CFStringGetCStringPtr() 不能保证返回非 NULL。从文档(强调添加):

此函数返回有效指针还是返回 NULL 取决于许多因素,所有这些都取决于字符串的创建方式及其属性。此外,函数结果可能会在不同版本和不同平台上发生变化。因此,在任何情况下都不要指望从该函数接收到非 NULL 结果。

总是回退到 CFStringGetCString(),但更好的是,使用 Objective-C 和 NSString 的辅助方法(例如 UTF8String)。

于 2014-03-31T17:57:56.767 回答