我看到了几个类似的问题,但他们没有针对我的具体情况的答案。我只需要交换一个结构数组中两个元素的位置,但是到目前为止我尝试过的所有东西都只能复制其中的一个。我认为问题出在交换函数上。
我需要在不使用标准库函数的情况下做到这一点。这就是我所拥有的:
struct RentalCar {
int year;
char make[STRLEN];
char model[STRLEN];
float price;
bool available;
};
void carCopy(RentalCar *dest, RentalCar *source) { // dest = source
dest->year = source->year;
myStrCpy(dest->make, source->make); // copy c-strings
myStrCpy(dest->model, source->model);
dest->price = source->price;
dest->available = source->available;
}
void carSwap(RentalCar *car1, RentalCar *car2) {
RentalCar *carTemp = car1;
carCopy(carTemp, car2); // tried different orders, only copy no swap
carCopy(car2, car1);
}
char *myStrCpy(char *dest, const char *source) { // copy cstring
char *origin = dest; // non iterated address
while (*source || *dest) {
*dest = *source;
dest++;
source++;
}
return origin; // could return void instead
}
发布于 2018-06-09 08:12:05
在carSwap
中,carTemp
是指向与car1
相同的内存位置的指针。这条线
carCopy(carTemp, car2); // tried different orders, only copy no swap
用car2
覆盖car1
。
将carSwap
更改为:
void carSwap(RentalCar *car1, RentalCar *car2) {
RentalCar carTemp;
carCopy(&carTemp, car2);
carCopy(car2, car1);
carCopy(car1, &carTemp);
}
https://stackoverflow.com/questions/50769780
复制相似问题