2012-09-25 42 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給他!

相關問題