为什么NSLog在记录此数组时会打印额外的零?

时间:2010-07-17 12:42:40

标签: iphone objective-c arrays xcode

使用这些变量:

NSInteger dataStart;
uint64_t dataSize[1];
const unsigned char *beginning;
NSInteger bytesEnd;

......在这些值:

dataStart = 499
dataSize[0] = 427
beginning = 9060864
bytesEnd = 9061793

......以下代码:

NSLog(@"dataStart = %d, dataSize[0] = %d, beginning = %d, bytesEnd = %d",
        dataStart, dataSize[0], (NSInteger)beginning, bytesEnd);

...将其发送到控制台:

dataStart = 499, dataSize[0] = 427, beginning = 0, bytesEnd = 9060864

换句话说,在数组之后插入了一个额外的零,撞到了其他变量。它始终这样做。我正在使用xcode 3.2.3。这里发生了什么?

[编辑强调:由于演员表错,所以不仅仅是打印零值的旧版本。它正在插入一个额外的零,然后打印正确的值,它应该打印bytesEnd,而不是打印bytesEnd。]

谢谢,

2 个答案:

答案 0 :(得分:2)

只是一个猜测,但你是在64位模式编译?在这种情况下,开始指针是64位,但NSInteger是32位,所以你只打印指针的高位32位,这是零。

我想这是一个人为的例子,因为没有一个心智正常的人会这样投。正确?

答案 1 :(得分:1)

您的格式选择器错误。 %d不足以打印uint64_t,即datasize [0]。使用%ld。