2012-09-23 24 views
-4

由於升級到的XCode 4.5,打印ints到異常高的值控制檯結果。例如:格式對於int自的XCode 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(@「整數:%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 stringWithFormat:@「Some int:%d」,someInt]'評估爲「Some int:300」,所以我們有NSlog(@「Some int:300」)',並且該字符串不包含任何格式符。所以即使你不這樣使用,也不能解釋OP的問題。 –

+0

正如@MartinR所說,儘管OP對'NSLog()'的使用可能被認爲是不安全的,在這種特定情況下,它沒有區別...... – NSGod

0

@askovpen是對你的不正確使用的NSLog,但是這條線在你的問題是有趣:

使用錯誤的格式字符串的數據類型

當然你垃圾出 - 你把垃圾!

NSLog作品使用的第一個參數計算出其它參數有多大將是。即如果你輸入%c,它需要參數中的下一個字符。如果你把%d它期望一個int。所以,如果你傳入一個int並告訴它期望一個浮點數然後是的,這是行不通的。你爲什麼期望它會呢?

的原因,你可能會在4.5的XCode,而不是其他XCodes由於內存管理的變化在編譯過程中因任何數量的其他事情變得不同的值可能是或可能是。