0

我面临以下错误
format string is not a string literal (potentially insecure) [-Wformat-security]

我的代码是:

appDelegate.reportString = [NSString stringWithFormat:queryString];
4

2 回答 2

2

由于您似乎不想格式化字符串(即没有与格式字符串一起使用的参数)而只是复制它,因此更好的使用方法是[NSString stringWithString:]

appDelegate.reportString = [NSString stringWithString:queryString];

如果queryString是不可变字符串而不是NSMutableString,则无需复制它,只需使用;

appDelegate.reportString = queryString;

结果相同。

于 2012-09-25T07:41:01.043 回答
1

问题是“ stringWithFormat”更喜欢编译时字符串文字,例如:

appDelegate.reportString = [NSString stringWithFormat: @"this is a series of numbers %@", @"123456"];

而在您的情况下,编译器看到的只是一个变量(“ queryString”),没有别的。

如果 queryString 没有改变,为什么不这样做:

appDelegate.reportString = queryString;

这会增加 queryString 的保留计数。或者你可以做“ [[NSString alloc] initWithString: queryString]”或“ [queryString copy]”来创建一个全新的保留副本。

当然,约阿希姆的回答也很好。给他+1!

于 2012-09-25T07:41:36.503 回答