scanf
является variadic function.
Таким образом, компилятор не может определить, правилен ли тип каждого переданного ему аргумента (ожидайте для типа первого аргумента, который явно объявлен как const char*
).
В результате решение «перемещается» от времени компиляции до времени выполнения, поэтому вместо ошибки времени компиляции вы можете получить ошибку во время выполнения.
Например, в случае scanf("%i")
функция ожидает адрес переменной int
.
В вашем коде вы передаете значение 0, поэтому scanf
будет сначала сканировать пользовательский ввод, а затем попытаться записать его по этому адресу памяти.
Если сегмент памяти, содержащий этот адрес, не имеет Укажите разрешение доступа (например, если код кода вашей программы находится по этому адресу), то эта попытка приведет к нарушению доступа к памяти во время выполнения ,
Вы можете заставить его работать правильно, изменив scanf("%i",arrayMax)
на scanf("%i",&arrayMax)
.
В C, что ваша программа правильно компилируется, это * никакой гарантии вообще *, что она также будет * работать * правильно! C дает вам большую силу, что означает, что легко сделать что-то «неправильное». – Carpetsmoker
Вы предлагаете, чтобы программа «компиляции» также всегда работала хорошо? Возможно, C не подходит для вас! – AFract
Цикл for закомментирован, потому что я пытался выяснить, почему он не работает. Я не мог найти точного ответа, поэтому я приехал сюда. –