2012-01-10 2 views
2

Я написал метод tha использует myarray, определенный в том же классе. Когда я использую рассчитывать всегда возвращает 0. Когда я использую:NSUInteger to int

printf("%d", [myarray count]); 

компилятор говорит:

Format '%d' expetcs type 'int', but argument 2 has type 'NSUInteger' 

почему?

ответ

5

Вы должны использовать %lu вместо %d. Компилятор проверяет вашу строку формата на параметры, которые вы передаете на printf, видит, что вы передаете unsigned, но печатаете его как целое число со знаком и выдает предупреждение. Предупреждение указывает, что для чисел, больших или равных 2^31 printf, выдается большое отрицательное число, когда тип данных подразумевает другую семантику, а именно большое положительное целое число.

EDITED в ответ на замечания Джош Caswell и thepepp

+3

В [документы говорят] (http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers .html # // apple_ref/doc/uid/TP40004265-SW5) использовать '% lu' для' NSUInteger'. –

+0

компилятор принимает% lu без проблем. благодаря обоим. – thepepp

+0

@JoshCaswell @theapp Спасибо за комментарии! Я не понимал, что размер 'NSUInteger' изменяется в зависимости от настройки платформы. Я отредактировал ответ. – dasblinkenlight