0
votes

Le programme produit des caractères étranges

Mon programme affiche correctement les 4 valeurs, mais ajoute des caractères étranges à certaines d'entre elles. Qu'est-ce que je fais de mal?

Je ne suis pas sûr si le problème réside dans ma fonction de copie ou ma fonction d'impression.

Voici ma fonction de copie (je dois écrire la mienne): p>

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

Voici ma fonction d'impression:

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

Voici la déclaration de RentalAgency : p>

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

Le résultat attendu de RentalArray [2] est:

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;
    }
    }

Mais à la place, il affiche:

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


1 commentaires

S'il vous plaît, fournissez le code complet.


3 Réponses :


0
votes

Regardez attentivement cette ligne:

*source++;

... et voyez si quelque chose ne semble pas un peu faux. Un peu ... d'asymétrie. Si vous ne le voyez pas tout de suite, peut-être que la compilation avec tous les avertissements activés vous aidera.

Lorsque vous aurez terminé, vous voudrez probablement aussi regarder:

destination = *source;

... et réfléchissez à ce qu'il fait, et si c'est ce que vous vouliez vraiment faire ici.


0 commentaires

0
votes

La fonction de copie s'arrête lorsqu'elle rencontre un \ 0 dans la chaîne source, ce qui signifie qu'elle copie tout jusqu'à mais n'inclut pas le \ 0 terminateur.


3 commentaires

Quelle est la manière la plus simple de s'arrêter après la dernière lettre de la chaîne source?


Voyez si vous pouvez le comprendre vous-même. Vous apprendrez mieux que si je vous dis comment.


Si je devais le faire moi-même, je remplirais les chaînes de caractères avec \ 0 , les remplirais puis vérifierais \ 0 en parcourant le tableau, mais je sais ce n'est pas la manière la plus efficace.



0
votes

Vous devriez peut-être modifier la fonction myStrCopy:

assert(destination!=NULL && source!=NULL);  
char* dest=destination;
while((*dest++=*source++) != '\0')
;
return destination;


0 commentaires