Неверное возвращаемое значение в основной функции?

Короче говоря:

В последней итерации

for(int i = 0; i<=name.length; i++) {

i будет равно name.length, что является незаконным индексом, так как индексы массива равны нулю, основанный.

Ваш код должен читать

for(int i = 0; i < name.length; i++) 
                 ^
2
задан Ahmad 25 June 2019 в 19:38
поделиться

4 ответа

Это по сути то, что @Brandon уже сказал в комментариях.

main должен возвращать код выхода / ошибки программы. В соглашении Unix 0 используется для указания отсутствия ошибки (значение ошибки «ложь»). А затем положительные значения используются для указания того, что произошла ошибка и какая это была ошибка.

6
ответ дан Edward Minnix 25 June 2019 в 19:38
поделиться

Ваша логика имела бы смысл, если бы возвращаемое значение main было интерпретировано как логическое значение, но это не так. Возврат из первоначального вызова к main подобен вызову функции exit: она сообщает о состоянии завершения системе, в которой вы работаете.

Стандарт C определяет 3 переносимых состояния выхода:

  • 0, указывающих на успех
  • EXIT_SUCCESS, также указывающих на успех
  • EXIT_FAILURE, указывающих fail

(последние два являются макросами, определенными в <stdlib.h>.)

В Unix допускается любое 8-битное значение (0 .. 255). Все ненулевые значения интерпретируются как коды ошибок. Не существует универсального соглашения о том, что означает любое число, просто то, что 0 представляет успех, а все остальное - своего рода провал.

Что касается того, кто может использовать возвращаемое значение: В Unix родительский процесс может использовать wait или waitpid, чтобы получить статус выхода прерванного потомка.


В стандартной библиотеке C функции, выполняющие действие, обычно не возвращают статус «истина / ложь». (Тесты, такие как islower или isdigit, но у них нет других эффектов.) Например, remove (который удаляет файл) возвращает 0 в случае успеха и -1 в случае ошибки. Это также общий шаблон с системными вызовами Unix. Например, open возвращает дескриптор файла (неотрицательное целое число) при успехе и -1 при ошибке.

8
ответ дан melpomene 25 June 2019 в 19:38
поделиться

Существует разница между тем, что язык C считает true (не ноль) или false (ноль), и тем, какие значения (ы) использует операционная система указывают на нормальное завершение программы.

Чтобы быть строго правильными, программы на С должны завершиться с кодом EXIT_SUCCESS для нормального завершения программы или EXIT_FAILURE для аварийного завершения. EXIT_SUCCESS будет отображаться в любом коде, используемом базовой платформой для указания успеха, который может быть или не быть 0.

2
ответ дан John Bode 25 June 2019 в 19:38
поделиться

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

Случай 1:

Вы потерпели неудачу?

Случай 2:

Вы прошли?

В первом случае «хорошая программа» вернет false (он же ноль)

Во втором случае «хорошая программа» вернет true (он же не ноль).

Консенсус заключается в использовании варианта 1, т. Е. «Вы потерпели неудачу?». Поэтому безотказная программа возвращает ноль, чтобы сказать «Я не ошибся».

Преимущество этого подхода заключается в том, что ненулевые значения могут использоваться для выражения различных видов отказов, в то время как ноль всегда означает «нет отказов»

.
1
ответ дан 4386427 25 June 2019 в 19:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: