Ответ 1
Это %td
. См. здесь.
Какой символ следует использовать для 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?
Это %td
. См. здесь.
Проект C11 объясняет модификатор длины для ptrdiff_t
в 7.21.6.1 7 "Функция fprintf
"
t
Указывает, что следующиеd
,i
,o
,u
,x
илиx
спецификатор преобразования применяются кptrdiff_t
или соответствующему аргументу типа без знака; или что следующий указатель преобразованияn
применяется к указателю на аргументptrdiff_t
.
Используйте "%td"
, как показано ниже: Кредит: @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);
Используйте %td
, и если ваш компилятор его не поддерживает, попробуйте %ld
(также введите вход в long
).