iPhone:格式化字符串问题(Objective C)

4
我需要帮忙。 为什么这个不起作用:
NSProcessInfo *process = [NSProcessInfo processInfo];
NSString *processName = [process processName];
int processId = [process processIdentifier];
NSString *processString = [NSString stringWithFormat:@"Process Name: @% Process ID: %f", processName, processId];
NSLog(processString);

但是这个会:
NSLog(@"Process Name: %@ Process ID: %d", [[NSProcessInfo processInfo] processName], [[NSProcessInfo processInfo] processIdentifier]);
3个回答

14
  • %@: 输出一个对象的字符串形式(包括NSString)。
  • %f: 输出一个浮点数(float)。
  • %d: 输出一个整数(int)。
  • %x: 输出一个数字的十六进制形式。

NSString:stringWithFormat: 方法存在两个问题:

  1. @% 应该改为 %@ 来输出一个 NSString。
  2. 你应该使用 %d 而不是 %f 来输出一个整数。

+1 最佳答案。由于@%不是有效的格式化程序,它将破坏格式字符串,您可能会(无意中)尝试将NSString打印为浮点数。很有可能您已经了解格式说明符,这只是一个简单的错误。关于此的一个好的苹果参考资料在这里:http://developer.apple.com/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html - Quinn Taylor

2

您的格式字符串有误:processId是一个整数而不是浮点数。

使用-Wformat来消除这种错误。


目标设置面板中有一个此项的设置。我不记得名字了,但我猜你可以通过在那个面板中搜索轻松找到它。 - Nikolai Ruhe
在Xcode中,-Wformat显示为“Typecheck Calls to printf/scanf”。然而,int将会被正确地向上转型,即使这不是预期的结果,问题也很容易被发现。真正的问题在于NSString的格式化程序 - @drewh给出了正确的答案。 - Quinn Taylor

0

你的格式有误,你在[NSString stringWithFormat:]中交换了@%。它可以用于日志,但不能用于字符串创建,因为格式应该是%@而不是@%


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接