NSLog和NSString stringWithFormat的一次性错误

时间:2010-05-06 01:55:56

标签: iphone objective-c cocoa-touch

有谁知道为什么NSLog和NSString会出现一次性错误?它在99%的程序中工作正常,但由于某种原因,这个错误出现在我的模型的描述方法中:

Example code:
localFileId = 7;
type = 2;
localId = 5;
NSLog(@"CachedFile localId=%d, 2=%d, localFileId=%d, type=%d, path=%@", localId, 2, localFileId, type, self.path);

Example Result: 
CachedFile localId=5, 2=0, localFileId=2, type=7, path=(null)

注意插入那里的“0”,它应该是“2 = 2”。这也发生在NSString stringWithFormat上。

1 个答案:

答案 0 :(得分:0)

%d需要一个int或long参数,即堆栈上的4个字节。

你没有显示localId的声明,它的大小是否正确?如果%d告诉NSLog读取4个字节,则为2个字节,这意味着NSLog也会读取下一个参数的前2个字节,然后是2个字节,等等。

编辑:好的,那是错的,我只是试了一下。我实际上是向后,而不是localId太短(<4字节),它太长(> 4字节),请参阅下面的@ dreamlax的评论。

short shortX = 1;
int intX = 2;
NSLog(@"shortX = %d, intX = %d", shortX, intX);

打印:shortX = 1, intX = 2