Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2013, 16:13   #1
millepetrozza
Пользователь
 
Регистрация: 22.09.2012
Сообщений: 33
По умолчанию Ошибка при возвращении значения

PHP код:
char *catalog_of_exams(int exam_number) {
    
char exam[][12]={"Math""Programming""Physics""English"};
    switch(
exam_number) {
        case 
1: return exam[0];
        case 
2: return exam[1];
        case 
3: return exam[2];
        case 
4: return exam[3];
        default: return 
0;
    }

По номеру экзамена функция должна возвращать его название, но на деле она возвращает какую-то чушь.
millepetrozza вне форума Ответить с цитированием
Старый 03.04.2013, 17:37   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Не возвращай адрес локальной переменной.
Код:
const char *catalog_of_exams(int exam_number) {
    static const char exam[][12]={"Math", "Programming", "Physics", "English"};
    if (exam_number >= 1 && exam_number <= 4)
        return exam[exam_number - 1];
    else
        return "";
}
Somebody вне форума Ответить с цитированием
Старый 03.04.2013, 21:44   #3
millepetrozza
Пользователь
 
Регистрация: 22.09.2012
Сообщений: 33
По умолчанию

Спасибо, всё работает, но вот вопрос, почему вы указали тип как const?
millepetrozza вне форума Ответить с цитированием
Старый 04.04.2013, 16:15   #4
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Ну, можно не const. Но тогда если вдруг где изменишь полученную строку, функция в следующий раз вернёт уже изменённую - оно надо?
Somebody вне форума Ответить с цитированием
Старый 04.04.2013, 16:32   #5
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Спасибо, всё работает, но вот вопрос, почему вы указали тип как const?
const - это просьба компилятору "пожалуйста, проследи, чтобы это нигде в коде не поменяли". Страховка от себя, в некотором роде. Например:
Код:
char* str = catalog_of_exams(2);
//20 строк кода...
strcat(str, text); //Перепутали порядок аргументов
Если возвращается char*, это скомпилируется и рухнет на выполнении. А если мы позаботились вернуть const char*, компилятор будет возражать и поможет осознать ошибку.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
При возвращении формы из развёрнутого вида в нормальный не происходит OnResize Night_Devil Общие вопросы Delphi 1 05.05.2012 12:11
Получение значения при вводе определенного значения armanmal Microsoft Office Excel 6 21.11.2011 17:30
Странная ошибка при работе с вводом значения (dev C++) Николай ПН Помощь студентам 2 21.06.2011 11:56
ошибка Edit при очистке значения Backspace-ом voverrr Общие вопросы Delphi 14 08.02.2011 09:27
при присвоении ADOQuery.SQL.Text значения DBLookupComboBox.KeyValue возникает ошибка namazi74 БД в Delphi 1 10.04.2010 07:20