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++; }
3 Réponses :
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.
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 code> terminateur.
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.
Vous devriez peut-être modifier la fonction myStrCopy:
assert(destination!=NULL && source!=NULL); char* dest=destination; while((*dest++=*source++) != '\0') ; return destination;
S'il vous plaît, fournissez le code complet.