Почему NSLog печатает дополнительный ноль при регистрации этого массива? - PullRequest
1 голос
/ 17 июля 2010

С этими переменными:

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 ]

2 голосов
/ 17 июля 2010

Просто предположение, но вы компилируете в 64-битном режиме?Начальный указатель в этом случае 64-битный, но NSInteger 32-битный, поэтому вы печатаете только старшие 32-битные биты указателя, которые равны нулю.пример, потому что никто в здравом уме не бросит так.Правильно?

1 голос
/ 18 июля 2010

У вас неправильный селектор формата.% d недостаточно для вывода uint64_t, который представляет собой размер данных [0].Используйте% ld.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...