2009-08-21 172 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

太棒了,完美无缺!谢了哥们。 – 2009-08-21 18:59:24

+0

如果你要做任何严重的Cocoa工作,我仍然会争论在'printf()'上使用'NSLog()'。 – jbrennan 2009-08-21 19:48:45

+2

通过'-cString'选择'-UTF8String' - 检查NSString文档。 – 2009-08-21 19:59:57

2

您应该改用NSLog()这需要一个字符串(或格式字符串)作为参数。

你可以使用任何

NSLog(getXMLElementFromString()); 

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

%@令牌指定一个Objective-C的对象(在这种情况下,一个NSString)。当涉及格式化字符串时,NSLog()printf()的工作基本相同,只是它也会接受对象标记。

+4

应该几乎总是避免使用第一种形式 - 如果攻击者每次都可以指定一个格式字符串,那么可以很快地将其拧紧。 – 2009-08-21 18:47:17

5

NSString*不等于传统的C字符串,这就是printf所期望的。要以这种方式使用printf,您需要利用NSString API获取以null结尾的字符串:

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

感谢您的帮助,令人惊叹。 – 2009-08-21 19:07:59