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

Какой символ следует использовать для 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?
26
задан chux - Reinstate Monica 19 September 2015 в 11:52
поделиться

1 ответ

В проекте 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);

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

12
ответ дан 28 November 2019 в 07:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: