我有一个极简单的代码片段来获取使用的应用程序支持目录。问题是,它不起作用!我在CFArrayRef
中得到了值(因为我想使用C代码,因为我稍后会在C ++应用程序中使用此代码段)并尝试使用CFArrayGetValueAtIndex()
获取第一个字符串。我使用C风格的转换将返回的void*
转换为char*
并尝试使用printf()
输出它,但没有输出!有谁能解释为什么?我已经通过CFArray
的文档在线查看并尝试了解问题,但没有提出任何问题。任何帮助将非常感激!
代码:
#include <Foundation/Foundation.h>
#include <typeinfo>
int main (int argc, const char * argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
CFArrayRef array = \
(CFArrayRef)NSSearchPathForDirectoriesInDomains(
NSApplicationSupportDirectory,
NSUserDirectory,
YES);
char* string = (char*)CFArrayGetValueAtIndex(array, 0);
printf("string: %s\n", string);
[pool drain];
}
答案 0 :(得分:2)
为什么要将其转换为char*
? NSSearchPathForDirectoriesInDomains()
生成的数组包含CFStringRef
s,而非char*
s。
尝试使用CFShow((CFTypeRef)CFArrayGetValueAtIndex(array, 0));