Добавлены дополнительные символы в C ++ для типа данных массива char - PullRequest
1 голос
/ 12 октября 2019

У меня есть следующий код, где booking_id рассчитывается с помощью функции.

void calculateBookingID(char* id);
class BookFlight
{
public:
    char booking_id[5];
    void addBooking()
    {
        string dummy;
        calculateBookingID(booking_id);
        cout << "Enter Airline ID : ";
        cin.getline(airline_id,3);             

    }
    void displayBooking()
    {       
            cout << booking_id <<'\t'<<airline_id<<endl;       
    }

private:
    char airline_id[3];

} b1,b2;

string getNextBookingID(string ID);

int main()
{
    b1.addBooking();
    b1.displayBooking();
    return 0; 
}

void calculateBookingID(char* id)
{  
        strcpy(id,"B1001");
}


По какой-то причине в booking_id добавляется авиакомпания_id. В отладчике значения выглядят нормально, но при отображении он добавляет 2 дополнительных символа.

Пример вывода:

B1001CD CD

Здесь booking_id - это B1001CD, где, как и должно быть, B1001

Я не могу понять, что не так. Может кто-нибудь, пожалуйста, посоветуйте, что я сделал неправильно? С уважением, Абинаш

Ответы [ 2 ]

1 голос
/ 12 октября 2019

Как вы уже поняли, изменение booking_id на char booking_id[6] решит вашу текущую проблему. Однако примите во внимание следующие моменты для улучшения вашего кода:

  1. Сделайте поля booking_id и airline_id достаточно большими, например, 100 символов для обработки ошибок. Будет гораздо лучше, если вы сможете сделать их динамическими.
  2. Сделать booking_id private
  3. Сделать calculateBookingID() методом частного класса. Старайтесь избегать свободных функций при кодировании в C ++
  4. Используйте strcpy_s вместо strcpy, так как последний ограничен.
  5. Избегайте объектов глобальной области, вместо этого создайте b1 and b2 внутриmain() там, где они вам нужны.
0 голосов
/ 12 октября 2019

Понял, booking_id должен состоять из 6 символов, чтобы вместить ноль.

Спасибо, Абинаш

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...