Я никогда не могу понять, как напечатать unsigned long
тип данных в C.
Предположим , что unsigned_foo
это unsigned long
, то я стараюсь:
printf("%lu\n", unsigned_foo)
printf("%du\n", unsigned_foo)
printf("%ud\n", unsigned_foo)
printf("%ll\n", unsigned_foo)
printf("%ld\n", unsigned_foo)
printf("%dl\n", unsigned_foo)
И все они печатают какое-то -123123123
число вместо того, unsigned long
что у меня есть.
c
printf
long-integer
unsigned
format-specifiers
bodacydo
источник
источник
%lu
сработало на этот раз. Спасибо. Что-то еще должно было случиться раньше, и это не сработало.%lu
. Технически это неопределенное поведение, но в действительности переменная имеет непредсказуемое значение, которое передается в printf, которую printf затем интерпретирует как unsigned. Я предполагаю, что изначальная проблема bodacydo заключалась в том, что поток достиг неверного вызова printf вместо того, который предполагался ...%lu
, разбито это:%
- запускает «спецификацию преобразования»;l
- модификатор длины,l
означает «[unsigned] long int»;u
- спецификатор преобразованияu
дляunsigned int
распечатки в десятичном виде. Поскольку мы дали модификатор длиныl
, он принимаетunsigned long int
. Буквы должны быть в таком порядке: проценты, длина, конверсия. (Есть еще несколько опций, таких как ширина и точность, которые вы можете добавить. Смотрите справочную страницу , так как она точно документирует все это!)%lu
для неподписанного долго%llu
для неподписанногоисточник
Для инт
%d
Для долгого времени
%ld
Для долгого долгого междунар
%lld
Для неподписанных long long int
%llu
источник
Из всех комбинаций, которые вы пробовали,
%ld
и%lu
являются единственными, которые вообще являются допустимыми спецификаторами формата printf.%lu
(длинный десятичный знак без знака)%lx
или%lX
(длинный шестнадцатеричный символ с строчными или прописными буквами) и%lo
(длинный восьмеричный) являются единственными допустимыми спецификаторами формата для переменной типа unsigned long (конечно, вы можете добавить модификаторы ширины поля, точности и т. д. между%
иl
).источник
printf
определено, что он требует точных правильных типов аргументов без допусков, которыеva_arg
могли бы иметь.Это будет полезно. , ,
источник
Формат есть
%lu
.Пожалуйста, проверьте о различных других типах данных и их использовании в printf здесь
источник
Правильный спецификатор для unsigned long - это
%lu
.Если вы не получаете точное ожидаемое значение, возможно, в вашем коде есть некоторые проблемы.
Пожалуйста, скопируйте ваш код здесь. Тогда, может быть, кто-то может лучше сказать вам, в чем проблема.
источник
У меня такая же проблема. Попробуйте "% ul", у меня это работает.
источник