2012-07-12 3 views
0

매우 유용한 간단한 코드 스 니펫을 사용하여 응용 프로그램 지원 디렉토리를 얻습니다. 문제는 작동하지 않는다는 것입니다! CFArrayRef (이후 C++ 응용 프로그램에서이 스 니펫을 사용할 예정이므로 C 코드를 사용하고 싶기 때문에)의 값을 얻고 CFArrayGetValueAtIndex()을 사용하여 첫 번째 문자열을 얻으려고합니다. void*을 C 스타일의 캐스트를 사용하여 char*으로 변환하고 printf()을 사용하여 출력하려고 시도했지만 아무 것도 출력되지 않습니다! 왜 그 이유를 설명 할 수 있습니까? 나는 CFArray에 대한 문서를 온라인으로 살펴본 후 문제를 Google에 시도했지만 아무 것도 생각 나지 않았습니다. 어떤 도움이라도 정말 감사 할 것입니다!CFArrayGetValueAtIndex가 aything을 반환하지 않습니다.

코드 :

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

답변

2

왜 당신은 char*로 변환된다? NSSearchPathForDirectoriesInDomains()의 배열 결과는 CFStringRef이 아니고 char*이 아닙니다.

CFShow((CFTypeRef)CFArrayGetValueAtIndex(array, 0));

+0

이 오 와우, 지금은 말도 느낌 사용해보십시오! 나는'CFStringRef'가'NSString'과 동등하다고 가정합니다, 그렇습니까? 그래서 저는 그것들을'char *'로 변환하는 방법을 사용해야 할 것입니다. 도와 주셔서 감사합니다! – rcplusplus

+0

@rcplusplus : 왜 여기서'CFArray'를 사용하고 있습니까? 왜이 캐스팅을하고 있니? –

+0

나는 C++ 코드를 작성했기 때문에 Objective-C 클래스를 사용하고 싶지 않습니다. C++에서 Objective-C를 사용하려면 .mm 확장자를 만들어야하는데, 이는 윈도우에서 컴파일 할 수 없다는 것을 의미합니다. – rcplusplus

관련 문제