Подтвердить что ты не робот

Предупреждение: Строка формата не является строковым литералом (потенциально небезопасным)

Я получаю предупреждение в строке NSLog

Format string is not a string literal(potentially insecure)

Из следующего кода

NSMutableString  *MarqueeMessage = [[NSMutableString alloc]init];
[MarqueeMessage appendString:@"Abc"];
NSString *immutableString = MarqueeMessage;
NSLog(immutableString);

Могу ли я спросить, почему после того, как я изменил строку на следующий код, предупреждение исчезло?

NSLog(immutableString,nil);
4b9b3361

Ответ 1

Это просто компилятор: "Эй, ты действительно знаешь, что делаешь?" Компилятор обеспокоен тем, что входная строка может содержать символ процента %, и вы не указали соответствующий аргумент. Очевидно, что это не так, на основе кода, который вы предоставили, но компилятор недостаточно умен, чтобы понять это.

Добавив аргумент (который может быть любым, включая число, строку или нуль), вы убедите компилятор, что знаете, что делаете. Альтернативный способ сделать компилятор счастливым - вывести строку с таким кодом.

NSLog( @"%@", immutableString );

Преимущество этого метода заключается в том, что неожиданные спецификаторы формата в строке (например, %s) не вызовут никаких проблем.