2012-04-03 3 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는 목표 - C에서 "내 사전을"라는 내 요소의 수를 기록하기 위해이 코드가 있습니다.

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

XCode는 "서식 문자열이 문자열 리터럴이 아닙니다. 잠재적으로 안전하지 않습니다."라고 경고합니다.

왜? 숫자를 직접 캐스팅하는 대신 보안 형식이 지정된 문자열을 사용하지 않습니까?

+1

중복 : [one] (http://stackoverflow.com/questions/9793199/calling-nslog-from-c-format-string-is-not-a-string-literal-potentially-inse), [two ] (http://stackoverflow.com/questions/9961363/why-is-my-string-potentially-unsecure-in-my-ios-application). –

답변

4

, 그래서이 작업을 수행하는 적절한 방법은 NSLog(@"%d", myDictionary.count);입니다 : 대신 사용해보십시오.

은 "안전하지 않은"의 이유는 다음과 같은 경우에 프로그램을 중단 할 수 있다는 것입니다 :

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

NSLog의 입력은 형식 문자열처럼 취급하지만, %d에 해당하는 값에 없다됩니다 끝. 귀하의 경우 그것은 문제가 아니지만 컴파일러는 그것을 파악하기에 충분히 똑똑하지 않습니다.

6

NSLog()는 이미 형식이 지정된 문자열을 전달한다고 가정합니다. 당신이 NSLog에 전달하는 문자열이 형식 문자열과 같이 해석됩니다

NSLog(@"%d", [myDictionary count]); 
관련 문제