2012-04-14 7 views
1

簡単に言えば、次のコードは、なぜ失敗するのか困惑しています。NSStringWithFormatクラッシュ

// This line works 
NSString * string = [NSString stringWithFormat:@"%lu",[[NSDate date] timeIntervalSince1970]]; 

// This line works 
string = [NSString stringWithFormat:@"%@",@"somestring"]; 

// This line generates and EXEC_BAD_ACCESS error 
string = [NSString stringWithFormat:@"%lu%@",[[NSDate date] timeIntervalSince1970],@"somestring"]; 

なぜですか?

答えて

2

[[NSDate date] timeIntervalSince1970]によって返される値のタイプは、typedef double NSTimeInterval;のタイプNSTimeIntervalで、unsigned intです。 @"%lu%@"@"%f%@"に置き換えても問題ありません。

+0

または、これをint型の '@"%lu%@ "(unsigned int)NSDate.date.timeIntervalSince1970'にキャストすることもできますが、このコメントは完全なものですが、私は答えを言うだろう:) – deanWombourne

+0

それはクラッシュを引き起こすことはありません、ちょうど私の目的の意図である返信日付の符号なしバージョンを生成します。 – YuzaKen

+0

@sch - 間違った書式指定子を渡すことの副作用としてスタックに何が起こっているのか分かりません:)どちらの場合でも動作しないと思われますが、損傷はメモリの安全なセクションで行われます)しかし、メモリ内でケース(2)で使用しようとします。 – deanWombourne