2012-04-03 9 views
0

可能性の重複:
Calling NSLog from C++: “Format string is not a string literal (potentially insecure)”
Why is my string potentially unsecure in my iOS application?私の文字列は潜在的に安全ではありませんか?

私はNSMutableDictionaryの要素数を記録するには、このコードを持ってはObjective-Cで "myDictionary" と呼ばれます。

NSLog([NSString stringWithFormat:@"%d", [myDictionary count]]); 

「フォーマット文字列は文字列リテラルではありません。潜在的に安全ではありません」という警告が表示されます。

なぜですか?カウントを直接キャストするのではなく、安全な書式設定された文字列を使用していませんか?

+1

重複:[1](http://stackoverflow.com/questions/9793199/calling-nslog-from-c-format-string-is-not-a-string-literal-potentially-inse)、[2 ](http://stackoverflow.com/questions/9961363/why-is-my-string-potentially-unsecure-in-myios-application)。 –

答えて

4

あなたはNSLogに渡す文字列は、フォーマット文字列と同様に解釈されるため、これを行うための適切な方法はNSLog(@"%d", myDictionary.count);です。

それが「安全でない」だ理由は、それがこのような場合にはプログラムをクラッシュさせることも可能だということです。NSLog

NSString *someString = @"The integer format specifier is %d"; 
NSLog([NSString stringWithFormat:@"%@", someString]); 

入力はフォーマット文字列と同様に扱われますが、%dのための対応する値はありません終わり。あなたの場合、それは問題ではありませんが、コンパイラはそれを理解するのに十分スマートではありません。

6

NSLog()はすでに、書式設定された文字列を渡すことを前提としています。代わりにこれを試してみてください:

NSLog(@"%d", [myDictionary count]); 
関連する問題