【问题标题】:Warning : Format string is not a string literal (potentially insecure)警告:格式字符串不是字符串文字(可能不安全)
【发布时间】:2014-04-02 01:07:09
【问题描述】:

我在 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);

【问题讨论】:

  • 请注意不要以大写字母开头变量。这只是你不想开始做的糟糕做法。应该是*marqueeMessage,而不是*MarqueeMessage

标签: objective-c


【解决方案1】:

这只是编译器的说法,“嘿,你真的知道你在做什么吗?”编译器担心输入字符串可能包含百分比字符%,而您没有指定相应的参数。显然,根据您提供的代码,情况并非如此,但编译器不够聪明,无法弄清楚这一点。

通过添加一个参数(可以是任何东西,包括数字、字符串或 nil),您可以让编译器相信您知道自己在做什么。让编译器满意的另一种方法是使用这样的代码输出字符串。

NSLog( @"%@", immutableString );

这种方法的优点是字符串中意外的格式说明符(例如%s)不会导致任何问题。

【讨论】:

  • 但这并不能回答可能不安全方面,为此您可以参考this answer
猜你喜欢
  • 2013-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
  • 2011-05-24
相关资源
最近更新 更多