Что такое проверка диапазона в c?

Пока я читаю некоторые уроки C, я нашел эту строку, которую я не понимаю:

C Недостатки проверки диапазона

Что это значит?

Еще один маленький вопрос: как я могу приостановить код, чтобы он не заканчивался быстро после окончания? Я думаю, мы говорим System("PAUSE") или что-то в этом роде. Как я могу сделать это на C?

2 ответа

Это означает, что вы можете определить операции, логический результат которых находится за пределами диапазона значений, допустимых для типа. например

unsigned char a = 0xFF;
unsigned char b = a + 1;

Компилятор очень счастливо разрешит это и вернет результат 0x00. 0xFF + 1 переполняет однобайтное хранилище a. Обратите внимание, что 0x00 - это только 8 разрядов правильного ответа 0x100. Это можно устранить с помощью:

unsigned char a = 0xFF;
unsigned b = (unsigned)a + 1;

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

Аналогичной проблемой является проверка границ, в которой компилятор с радостью позволит вам написать:

int a[5] = {1, 2, 3, 4, 5};
i = 1000;
b = a[i];

(EDITED на основе комментариев :) После выполнения этого кода, скорее всего, будет выбрано исключение, но компилятору все равно.


В Windows часто можно сказать, что система ("пауза") заставит среду ждать, пока вы нажмете enter, при условии, что у вас есть #included stdlib.h. Однако вы должны знать следующее:

  • Не стоит полагаться на хорошую практику, чтобы полагаться на присутствие команды pause.exe в текущей среде. Это может быть справедливо для большинства систем Windows, но, как правило, это неверно для Unices или Mac. Таким образом, вы бы ограничили свою переносимую программу на один платоном.

  • Вы можете подумать, почему вы хотите, чтобы пользователь нажал кнопку ввода. Большинство людей считают это хорошим, если программы выполняют свою работу, а затем просто выходят. Очень необычно, что "настоящие" программы ждут подтверждения пользователя таким образом. Если вы просто хотите увидеть, что подсказывает DOS, прежде чем он закроется, возможно, проблема связана с подсказкой DOS, а не с вашей программой?

Я помню, как задавал этот вопрос, когда начинал программировать, но с тех пор я понял, что в большинстве случаев приостановка программ - это неправильная вещь.

licensed under cc by-sa 3.0 with attribution.