В этом спецификаторе формата% d следует читать 4 байта, являющихся спецификатором целочисленного формата, но x, являющийся символом, сохраняется только в 1 байт. поэтому оставшиеся 3 байта должны иметь значение мусора, а выход должен быть случайным. Но выход всегда приходит 97, который является значением ASCII 'a'. Может ли кто-нибудь сказать, как работает спецификатор формата?Как работает спецификатор формата% d?
ответ
Аргументов функций, которые не соответствуют заявленному типу параметра функции (то есть, поскольку функция позволяет переменные аргументы, как printf
, или потому что прототип функции не предусмотрен) претерпевает продвижение по службе аргумента умолчанию: (ср C11 6.5.2.2), которые превращают значение char
в значение int
или unsigned int
. Поэтому, проходя a
по printf
соответствует требованиям для %d
.
В стандарте C, если 'int' может представлять все значения' char', значение 'char' будет присвоено' int', в противном случае оно будет переведено в 'unsigned int'. Таким образом, в большинстве реализаций ему будет присвоено значение 'int', потому что единственный случай, когда' int' не может представлять все значения 'char', - это когда' char' и 'int' имеют одинаковый размер (т. Е. Когда 'sizeof (int) == 1'), а' char' - без знака. Такие реализации довольно редки! –
Итак, я слышал, хотя я еще не встречал такую платформу. –
#include
- 1. % d спецификатор формата в Objective-C
- 2. Спецификатор формата в c
- 3. C# формат строки «D» спецификатор
- 4. Спецификатор сложного формата C
- 5. Спецификатор формата C
- 6. Спецификатор формата Msfvenom
- 7. fscanf спецификатор формата в структурах
- 8. Формата спецификатор для шаблонного типа
- 9. java.util.MissingFormatArgumentException: Спецификатор формата '% s'
- 10. Е() и спецификатор формата ссылки
- 11. Переменная спецификатор формата в C
- 12. C - Спецификатор формата% x
- 13. C «s спецификатор формата
- 14. Как работает% *. * D в printf()?
- 15. Строка формата, которая уже имеет спецификатор формата% @
- 16. спецификатор формата для BIGINT из MySQL-питона
- 17. Что означает спецификатор формата% * s?
- 18. Спецификатор формата float to String
- 19. Где спецификатор формата DateTime 'Z'?
- 20. Некоторые спецификатор формата в C
- 21. Спецификатор формата в C нечеткий
- 22. C printf Спецификатор формата% _fi
- 23. Что делает «s» как спецификатор формата?
- 24. Как определить спецификатор формата по значению аргумента?
- 25. Спецификатор формата для печати содержимого буфера «stat»
- 26. зсапЕ спецификатор формата читать только номер
- 27. MySQL спецификатор формата для часового пояса
- 28. Существует ли спецификатор общего формата для `sscanf`?
- 29. Как внутренний спецификатор работает
- 30. % Спецификатор формата X для представления целого числа
Я думаю, это потому, что 'char x' повышается до' DWORD' в стеке. – Neijwiert
@Neijwiert: на языке C нет «стека». –
@KerrekSB Я говорю о скомпилированном коде под языком 'C'. Это может объяснить это поведение. – Neijwiert