2012-09-23 1 views
-4

XCode 4.5로 업그레이드 한 후 ints을 콘솔에 인쇄하면 비정상적으로 높은 값이 발생합니다. 예 :Xcode 이후 int 형식 4.5

int someInt = 300; 
NSLog([NSString stringWithFormat:@"Some int: %d", someInt]); // prints Some int: 11581443 

일반적으로 데이터 형식에 잘못된 형식 문자열을 사용하는 경우에만 표시됩니다. LLDB를 사용하고 있습니다.

+1

이 동작을 나타내는 정확한 코드 인스턴스를 제공하십시오. (제공 한 코드는'stringWithFormat :'에 콜론이 없기 때문에 컴파일되지 않습니다. 수정 한 후에 코드는 새로운 프로젝트에서 잘 작동합니다). – NSGod

답변

1

NSLog(@"Integer: %i", int)

+0

'% d'과'% i'은 기본적으로 동의어입니다; 차이를 만들어서는 안된다. 다른 뭔가가 있어야합니다 .... – NSGod

+0

@NSGod'NSLog (@ "Integer : % d", int)'도 마찬가지입니다 – askovpen

3

당신 잘못 사용 NSLog을보십시오.

void NSLog (
    NSString *format, 
    ... 
); 

예 :

int someInt = 100; 
NSString* str = [NSString stringWithFormat:@"%d",someInt]; 
NSLog(@"%@",str); 

또는

NSLog(@"%d", someInt) 

또는

NSLog(@"%@", [NSString stringWithFormat:@"%d",someInt]) 
+1

하지만 다른 것이 있어야합니다. ''NSString (@ "Some int : 300")'을 가지며 그 문자열은 어떤 형식도 포함하지 않기 때문에 '[NSString stringWithFormat : @] 일부 int : % d ", someInt] 지정자. 그래서 그것을 사용하지 않아도 OP의 문제점을 설명하지는 않습니다. –

+0

@MartinR이 말했듯이, OP의 'NSLog()'사용은 잠재적으로 안전하지 않은 것으로 간주 될 수 있지만,이 특별한 경우에는 아무런 차이가 없습니다 ... – NSGod

0

@askovpen 그러나 귀하의 질문에이 라인은, NSLog의 당신의 잘못된 사용에 대한 권리 재미있는 :

데이터 유형은 쓰레기 나가 물론

에 대한 잘못된 형식 문자열을 사용하여 - 당신은 쓰레기를두고있어!

NSLog은 첫 번째 매개 변수를 사용하여 다른 매개 변수의 크기를 계산합니다. 즉, %c을 입력하면 매개 변수에 다음 문자가 올 것으로 예상됩니다. %d을 입력하면 int가 필요합니다. 따라서 int를 전달하고 float을 기대한다고 말하면 작동하지 않습니다. 왜 그렇게 기대하니?

다른 XCode 대신 XCode 4.5에서 다른 값을 얻는 이유는 컴파일 중 메모리 관리가 변경되었거나 다른 여러 가지 이유 때문일 수 있습니다.