2009-08-21 5 views
1

어리석은 것처럼 들리 겠지만 objective-c에 문자열을 반환하고 표시하는 간단한 함수를 작성하려고합니다. 다음 코드는 거의 작동하지만 printf가 함수를 받아들이지 않습니다. 반환 값 ...문자열을 반환하는 함수

NSString* getXMLElementFromString(); 

int main(int argc, char *argv[]) 
{ 
    printf(getXMLElementFromString()); 
    return NSApplicationMain(argc, (const char **) argv); 
} 

NSString* getXMLElementFromString() { 
    NSString* returnValue; 
    returnValue = @"Hello!"; 
    return returnValue; 
} 

답변

1

printf가 NSString을 처리 할 수 ​​있는지 알지 못합니다. somethign 같은 시도 :

printf ("%s\n", [getXMLElementFromString()cString]); 
+0

대단히 훌륭합니다. 고마워. –

+0

심각한 코코아 작업을 수행하려면'print() '를 통해'NSLog()'를 사용하는 것이 여전히 논쟁의 여지가 있습니다. – jbrennan

+2

'-cString'보다'-UTF8String'을 선호합니다 - NSString 문서를 확인하십시오. –

2

대신 매개 변수로 문자열 (또는 형식 문자열을) 소요 NSLog()를 사용해야합니다.

당신은 사용할 수 있습니다 중 하나

NSLog(getXMLElementFromString()); 

또는 %@ 토큰 (이 경우있는 NSString에) 오브젝티브 C 개체를 지정

NSLog(@"The string: %@", getXMLElementFromString()); 

. NSLog()은 형식 문자열과 관련하여 본질적으로 printf()과 동일하게 작동하며 객체 토큰도 허용합니다.

+4

첫 번째 양식은 거의 항상 피해야합니다. 공격자가 형식 문자열을 지정할 수 있으면 진짜 빨리 망칠 수 있습니다. –

5

NSString*은 전통적인 C 문자열과 같지 않습니다. 이는 printf이 기대하는 것입니다. 이러한 방식으로 printf을 사용하려면 NSString API를 활용하여 null로 끝나는 문자열을 가져와야합니다.

printf("%s", [getXMLElementFromString() UTF8String]); 
+1

도와 줘서 고마워요, 놀라운. –

관련 문제