2012-09-25 16 views
0

我面对下面错误
format string is not a string literal (potentially insecure) [-Wformat-security]我在Xcode 4.5工作,我跟踪的警告,这种“格式字符串不是字面(潜在不安全)的字符串”

和我代码是:

appDelegate.reportString = [NSString stringWithFormat:queryString]; 
+2

你想用这条线做什么?在这种情况下,只有'appDelegate.reportString = queryString'有什么问题? –

+1

我只是从'queryString'复制到'appDelegate.reportString'字符串的组合,但我在xcode 4.5中运行项目我遇到了上述错误。请帮助我 –

回答

2

既然你似乎并不想格式化字符串(即没有参数与格式字符串使用),但只是复制它,更好的通话使用的是[NSString stringWithString:]

appDelegate.reportString = [NSString stringWithString:queryString]; 

如果queryString是不可变的字符串,而不是一个NSMutableString,你并不需要复制,但可以直接使用;

appDelegate.reportString = queryString; 

具有相同的结果。

1

的问题是,“stringWithFormat”喜欢一个编译字符串字面量,例如:

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

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

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

appDelegate.reportString = queryString; 

其中增加查询字符串保留计数。或者,您可以执行“[[NSString alloc] initWithString: queryString]”或“[queryString copy]”来创建全新的保留副本。

当然Joachim的答案也是很好的。 +1给他!

相关问题