函数返回一个字符串
愚蠢,因为它可能听起来,我想在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;
}
我不知道printf可以处理NSString。尝试somethign像:
printf ("%s\n", [getXMLElementFromString()cString]);
您应该改用NSLog()
这需要一个字符串(或格式字符串)作为参数。
你可以使用任何
NSLog(getXMLElementFromString());
或
NSLog(@"The string: %@", getXMLElementFromString());
凡%@
令牌指定一个Objective-C的对象(在这种情况下,一个NSString)。当涉及格式化字符串时,NSLog()
与printf()
的工作基本相同,只是它也会接受对象标记。
应该几乎总是避免使用第一种形式 - 如果攻击者每次都可以指定一个格式字符串,那么可以很快地将其拧紧。 – 2009-08-21 18:47:17
NSString*
不等于传统的C字符串,这就是printf
所期望的。要以这种方式使用printf
,您需要利用NSString API获取以null结尾的字符串:
printf("%s", [getXMLElementFromString() UTF8String]);
感谢您的帮助,令人惊叹。 – 2009-08-21 19:07:59
太棒了,完美无缺!谢了哥们。 – 2009-08-21 18:59:24
如果你要做任何严重的Cocoa工作,我仍然会争论在'printf()'上使用'NSLog()'。 – jbrennan 2009-08-21 19:48:45
通过'-cString'选择'-UTF8String' - 检查NSString文档。 – 2009-08-21 19:59:57