可能重复:
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警告我“格式字符串不是字符串文字。可能不安全。”
为什么呢?我不是使用安全格式化的字符串而不是直接转换计数吗?
答案 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
没有对应的值。在你的情况下,它不是问题,但编译器不够聪明,无法解决这个问题。