必威体育Betway必威体育官网
当前位置:首页 > IT技术

解决编译时出现的警告:format string is not a string literal (potentially insecure)

时间:2019-08-19 02:12:08来源:IT技术作者:seo实验室小编阅读:88次「手机版」
 

potentially

转载自:http://www.cocoachina.com/bbs/read.php?tid=87645

在Xcode 4.2(iOS 5)之前,我猜大家都和我一样很喜欢下面的调试输出写法:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

NSString *str = @"attention";

// first warning

NSLog(str);

// second warning

NSLog([str stringByAPPendingFormat:@", %@", @"Xcode 4.2 do not support this format!"]);

// third warning

NSLog([NSString stringWithFormat:@"%@, Xcode 4.2 do not support this format!", @"Attention"]);

// fourth warning

NSException *exception = [NSException exceptionWithName:@"Attention"

reason:@"Xcode 4.2 do not support this format!"

userInfo:nil];

NSLog(exception);

但是在Xcode 4.2(iOS 5)之后,貌似苹果更新的编译器,出了支持ARC的Apple LLVM compiler 3.0。然后我发现每次编译,以前的这些输出都会产生一个warning(警告,黄色三角形)。

在StackOverflow和iPhone Dev SDK查找相关答案之后,发现在最新版的编译器里面NSLog为了安全,只接受格式化的字符串,因为NSLog底层也是用printf来格式化输出的。

所以上面的写法都会给出警告,可以把上面的写法修改为以下合法模式:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

NSString *str = @"Attention";

// first warning

NSLog(str);// warning

NSLog(@"%@", str); // solution

NSLog(str, nil); // solution

// second warning

NSLog([str stringByappendingFormat:@", %@", @"Xcode 4.2 do not support this format!"]); // warning

NSLog(@"%@", [str stringByAppendingFormat:@", %@", @"Xcode 4.2 do not support this format!"]); // solution

NSLog([str stringByAppendingFormat:@", %@", @"Xcode 4.2 do not support this format!"], nil); //solution

// third warning

NSLog([NSString stringWithFormat:@"%@, Xcode 4.2 do not support this format!", @"Attention"]); // warning

NSLog(@"%@, Xcode 4.2 do not support this format!", @"Attention");// solution

NSLog([NSString stringWithFormat:@"%@, Xcode 4.2 do not support this format!", @"Attention"], nil);// solution

// fourth warning

NSException *exception = [NSException exceptionWithName:@"Attention"

reason:@"Xcode 4.2 do not support this format!"

userInfo:nil];

NSLog(exception);// warning

NSLog(@"%@", exception); // solution

相关阅读

关于 Windows 不断报 "脚本错误 当前页面的脚本发生

笔者 Windows 版本:Windows 8 Enterprise 64 位 (DirectX 11) Windows 有一天忽然开始报 “脚本错误 当前页面的脚本发生错误” 警

数字图像处理 -灰度变换 之 对数变换(Log Transformati

本文参考了 以下这篇文章[数字图像处理]灰度变换——反转,对数变换,伽马变换,灰度拉伸,灰度切割,位图切割 https://blog.csdn.net/zho

SimpleDateFormat 格式化日期

包含在Java的 java.text.SimpleDateFormat;包中日期和时间格式由 日期和时间模式字符串 指定。在 日期和时间模式字符串 中,未

在Delphi中FormatDateTime函数的用法

在Delphi中FormatDateTime函数的用法 function FormatDateTime(const Format: string; DateTime: TDateTime): string; Format

substring从指定字符串开始截取

String filename=F:\workspace\ssh_photo\WebContent\uploadFile\1444783552338pic.jpg ; int begin=filename.indexOf(“ssh

分享到:

栏目导航

推荐阅读

热门阅读