我在NSLog行中收到警告
Format string is not a string literal(potentially insecure)
来自以下代码
NSMutableString *MarqueeMessage = [[NSMutableString alloc]init];
[MarqueeMessage appendString:@"Abc"];
NSString *immutableString = MarqueeMessage;
NSLog(immutableString);
我可以问为什么在将行改为以下代码后,警告消失了?
NSLog(immutableString,nil);
答案 0 :(得分:71)
这只是编译器的说法,“嘿,你真的知道你在做什么吗?”编译器担心输入字符串可能包含百分号%
,并且您没有指定相应的参数。显然,基于您提供的代码并非如此,但编译器并不够聪明,无法解决这个问题。
通过添加一个参数(可以包括数字,字符串或nil),您可以说服编译器知道您在做什么。使编译器满意的另一种方法是输出带有这样代码的字符串。
NSLog( @"%@", immutableString );
此方法的优点是字符串中的意外格式说明符(例如%s
)不会导致任何问题。