Программа выводит странные символы - PullRequest
0 голосов
/ 19 сентября 2019

Моя программа правильно выводит 4 значения, но добавляет к некоторым из них странные символы.Что я делаю не так?

Я не уверен, что проблема заключается в моей функции копирования или моей функции печати. ​​

Вот моя функция копирования (я должен написать свою собственную):

char* myStrCopy(char *destination,const char *source){
   while(*source != '\0'){
    *destination = *source;
    *source++;
    destination++;
   }

Вот моя функция печати:

void printAllData(RentalAgency *agencies){

    RentalAgency *agencies_ptr = agencies;
    for(int i = 0; i < 3;i++,*(agencies_ptr++)){
        cout << agencies_ptr->name << " ";
        for(int j = 0; j < 5;j++){
            cout << *(agencies_ptr->zipcode+j);
        }
        cout << endl;

        RentalCar *inv_ptr = agencies_ptr->inventory;
        for(int j = 0;j < MAX_CARS;j++,++inv_ptr){
            cout << inv_ptr->getYear() << " ";
            cout << inv_ptr->getMake() << " ";
            cout << inv_ptr->getModel() << " ";
            cout << inv_ptr->getPrice() << " ";
            cout << boolalpha << inv_ptr->getAvailability() << endl;
        }
        cout << endl;
    }
    }

Вот объявление RentalAgency:

struct RentalAgency{
    char name[MAX_SIZE];
    int zipcode[5];
    RentalCar inventory[MAX_CARS];
};

Ожидаемый вывод RentalArray[2]:

Alamo 89502
2011 Toyota Rav4 $65.02 true
2012 Mazda CX5 $86.75 true
2016 Subaru Outback $71.27 false
2015 Ford F150 $112.83 true
2010 Toyota Corolla $50.36 true

Но вместо этого он выдает:

Alamo 89502
2011 ToyotaN Rav4 65.02 true
2012 Mazda CX5  86.75 true
2016 Subaru Outback 71.27 false
2015 FordÉ F15 112.83 true
2010 ToyotaÅ Corolla 50.36 true

Ответы [ 3 ]

0 голосов
/ 19 сентября 2019

Функция копирования останавливается, когда она достигает \0 в исходной строке, что означает, что она копирует все до , но не включает терминатор \0.

0 голосов
/ 19 сентября 2019

Возможно, вам следует изменить функцию myStrCopy:

assert(destination!=NULL && source!=NULL);  
char* dest=destination;
while((*dest++=*source++) != '\0')
;
return destination;
0 голосов
/ 19 сентября 2019

Внимательно посмотрите на эту строку:

destination = *source;

... и посмотрите, не выглядит ли что-то не так.Немного ... асимметрии.Если вы не видите это сразу, возможно, компиляция со всеми включенными предупреждениями поможет.

Когда вы закончите с этим, вы, вероятно, также захотите посмотреть на:

*source++;

... и подумайте о том, что он делает, и действительно ли это то, что вы действительно хотели сделать здесь.

...