Как напечатать пробел в uint64_t (C)

Когда я пытаюсь это:

#include <stdio.h>
#include <inttypes.h>

int main (int argc, char **argv)
{
  uint64_t key = 0xf0000000ffffffff;

  printf ("key=%" PRIx64, key, "\t\n  %" PRIx64, "\n", key);
}

Он печатает key=f0000000ffffffff; все пробелы удаляются. Как я могу их распечатать? Я использую gcc (Ubuntu/Linaro 4.7.3-1ubuntu1) 4.7.3.


person hola    schedule 29.07.2014    source источник
comment
Никогда не игнорируйте предупреждения компилятора... такие как too many arguments for format [-Wformat-extra-args] для приличного gcc   -  person Ferenc Deak    schedule 29.07.2014
comment
Предупреждения не было. Я тоже не подавлял. @fritzone   -  person hola    schedule 29.07.2014
comment
@fritzone gcc. Я указал это в своем вопросе. Моя ОС Mint Olivia Xfce (64 bit).   -  person hola    schedule 29.07.2014
comment
ага, поздно увидел :) Удалил комментарий. gcc 4.7.3 на самом деле довольно приличный компилятор, он должен был выдать предупреждение...   -  person Ferenc Deak    schedule 29.07.2014


Ответы (1)


Строка формата, которую вы предоставляете printf, является только

"key=%" PRIx64

Все остальные являются аргументами для строки формата, и, поскольку строка формата содержит только один спецификатор преобразования, печатается первый аргумент, а остальные отбрасываются.

Я думаю, вы хотите, например.

printf("key=%" PRIx64 "\t\n  %" PRIx64 "\n", key, key);

Обратите внимание на отсутствие запятых в строке формата.

person Some programmer dude    schedule 29.07.2014