我的字符串怎么可能不安全?

时间:2012-04-03 00:25:17

标签: objective-c ios

  

可能重复:
  Calling NSLog from C++: “Format string is not a string literal (potentially insecure)”
  Why is my string potentially unsecure in my iOS application?

我有这段代码来记录我在NSMutableDictionary中的元素数量,在objective-c中名为“myDictionary”。

NSLog([NSString stringWithFormat:@"%d", [myDictionary count]]);

XCode警告我“格式字符串不是字符串文字。可能不安全。”

为什么呢?我不是使用安全格式化的字符串而不是直接转换计数吗?

2 个答案:

答案 0 :(得分:6)

NSLog()已经假定您将传入格式化的字符串。试试这个:

NSLog(@"%d", [myDictionary count]);

答案 1 :(得分:4)

传递给NSLog的字符串被解释为格式字符串,因此执行此操作的适当方法是NSLog(@"%d", myDictionary.count);

它不安全的原因"是这样的,在这种情况下崩溃程序是可能的:

NSString *someString = @"The integer format specifier is %d";
NSLog([NSString stringWithFormat:@"%@", someString]);

NSLog的输入被视为格式字符串,但最后%d没有对应的值。在你的情况下,它不是问题,但编译器不够聪明,无法解决这个问题。