NSString stringWithFormat格式警告

时间:2014-06-06 20:02:30

标签: ios nsstring

我可能使用错误的符号将NSString类型包含在另一个字符串中。

const char* error; //it's set, not nil
NSLog([NSString stringWithFormat : @"Problem with SQL statement in \n %@ \n %@",sqlQuery,[NSString stringWithUTF8String:error]]);

表达式有效,但我收到此警告:

Formatting string is not a string literal(potentially insecure)

有没有办法摆脱警告?

4 个答案:

答案 0 :(得分:2)

根据NSLog实现,函数需要一个常量字符串或格式说明符字符串作为它的第一个参数。

您需要使用:

NSLog(@"Problem with SQL statement in [BSurfSpotDBOperations allSpots] \n %@ \n %@",sqlQuery,[NSString stringWithUTF8String:error]);

答案 1 :(得分:2)

NSLog()语句中的格式字符串必须是常量字符串,否则会出现警告。重写代码以使格式部分成为字符串文字。

通常避免使用复杂的复合语句。临时变量使代码更具可读性,并且可能减少错误。编译器在发布编译时非常擅长消除临时性。

示例:

const char* error; //it's set, not nil
NSString *errorString = [NSString stringWithUTF8String:error];
NSLog(@"Problem with SQL statement in [BSurfSpotDBOperations allSpots] \n %@ \n %@", sqlQuery, errorString);

答案 2 :(得分:1)

此处不需要

stringWithFormat,因为NSLog()为您提供了类似的选项。您只需将其更改为:

NSLog(@"Problem with ... \n %@ \n %@", sqlQuery,[NSString stringWithUTF8String:error]);

这将消除警告,因为NSLog知道它不会遇到一个字符串文字,它不知道该怎么做,这是一个安全问题。

答案 3 :(得分:0)

试试这个方法:

NSLog([@"Problem with SQL statement in [BSurfSpotDBOperations allSpots] \n %@ \n %@"
,sqlQuery,[NSString stringWithUTF8String:error]);

我认为您还可以[NSString stringWithUTF8String:error]

翻译error

认为这可以帮到你;)