C: Какой символ должен использоваться для ptrdiff_t в printf? - PullRequest
25 голосов
/ 31 октября 2011

Какой символ следует использовать для ptrdiff_t в printf?

Стандарт C четко объясняет, как печатать ptrdiff_t в printf? Я не нашел никого.

int a = 1;
int b = 2;

int* pa = &a;
int* pb = &b;

ptrdiff_t diff = b - a;

printf("diff = %?", diff); // % what?

Ответы [ 3 ]

25 голосов
/ 31 октября 2011

Это %td. Смотри здесь .

12 голосов
/ 30 октября 2013

C11 черновик объясняет модификатор длины для ptrdiff_t в 7.21.6.1 7 «Функция fprintf»

t
Указывает, что следующие d, i, o, u, x или X спецификатор преобразования применяется к ptrdiff_t или соответствующему аргументу целочисленного типа без знака;или что следующий указатель преобразования n применяется к указателю на аргумент ptrdiff_t.

Используйте "%td", как показано ниже: Credit: @ trojanfoe

ptrdiff_t diff = b - a;
printf("diff = %td", diff);

Если компилятор не поддерживает "%td", приведение к типу со знаком - чем длиннее, тем лучше.Затем убедитесь, что альтернативный формат и аргумент совпадают.

// Note the cast
printf("diff = %lld", (long long) diff); // or
printf("diff = %ld", (long) diff);

Ссылка Спецификаторы формата

5 голосов
/ 31 октября 2011

Используйте %td, и если ваш компилятор не поддерживает его, вам следует попробовать %ld (также приведите ввод к long).

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