我可能使用错误的符号将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)
有没有办法摆脱警告?
答案 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
认为这可以帮到你;)