2015-12-25 1 views
-1

У меня есть проблема, как этот Q. выбрать любую ошибку вы можете иметь здесьРазницы между выполнением и синтаксической ошибкой

int main(void) 
{ 
    int a; 

    printf("Input a integer number >>"); 
    scanf("%d\n", a); 
    printf("The input number is %d\n", a); 
    return 0; 
} 
  1. ошибка синтаксис.
  2. логическая ошибка
  3. ошибка времени
  4. ошибки нет

Моя мысль: я думал, что это был как синтаксис и ошибки времени выполнения, потому что для синтаксиса, нет нет & перед и для ошибки во время выполнения программа будет по-прежнему построена для запуска первого отчета о печати и внезапно останавливается на scanf(), потому что нет «&». но мой ответ сказал мне, что я ошибаюсь. Я знаю, что это не логическая ошибка. но я смущен, какой из них ...

ответ

0

Нет, здесь не будет никакой синтаксической ошибки, только ошибка времени выполнения.

scanf() ожидает указатель на переменную для хранения значения, но это не означает, что мы должны использовать оператор & всегда для передачи адреса.

Представьте себе, в случае a бы указатель (и выделяется собственно памяти),

scanf("%d\n", a); 

был бы вполне допустимо утверждение, не так ли?

В этом коде, вы прошли значение неинициализированного переменной (, который получит протектор как адрес, который будет недействительным) в качестве аргумента в формате %d спецификатора к scanf(), так что вызывает undefined behavior что вызывает ошибку времени выполнения.

0

Синтаксические ошибки обнаруживаются компилятором. Эта программа компилируется отлично, поэтому она не имеет синтаксических ошибок.

Тем не менее, эта программа передает значение в неинициализированного переменной a к scanf, которое не определено поведение, то есть ошибки во время выполнения.

Смежные вопросы