В C, когда &
отсутствует для аргумента в scanf()
, не возникает ошибка компиляции; вместо этого отображаемые результаты неверны (т. е. возникает семантическая ошибка).Отсутствие спецификатора доступа и в C не приводит к ошибке компиляции
Рассмотрим следующий код:
char str[30];
int a;
printf("Enter the value");
scanf("%s %d", str, a); // This is the statement in question.
printf("You entered %s %d", str, a);
Здесь я знаю str
является массив символов, так что будет иметь базовый адрес, и, таким образом, не будет производить ошибку компиляции. Но почему отсутствие &
для аргумента a
не приводит к ошибке компиляции?
Также str
дает правильный выход, но целое число всегда производит значение -28770 как выход. Почему это?
Что вы вводите? И что вы ожидаете от вывода? –
"целое число, всегда указывающее -28770 как результат" - неинициализированная локальная переменная 'a'. Содержит все, что было в этой ячейке памяти (стек или регистр) до объявления. Может быть одинаковым при каждом прогоне, каждый раз может быть разным; поэтому это «неопределенное поведение». - Разве ваш компилятор не предупредил вас об этом? – JimmyB
в порядке. И компилятор не дал никаких предупреждений. Спасибо за ответ. – Gon