用strcpy进行气泡分选

用strcpy进行气泡分选,c,arrays,sorting,C,Arrays,Sorting,因此,我有一个示例数组: char* drivers[10] = {"Mark", "Jacob", "Andre", "Thomas", "Hellboy"}; float lap_time[10]; 以及一个srand函数,该函数为每个驾驶员生成随机的“圈速”,并将圈速存储到数组中: char* drivers[10] = {"Mark", "Jacob", "Andre", "Thomas", "Hellboy"}; float lap_time[10]; 我需要分别对它们进行排序

因此,我有一个示例
数组

char* drivers[10] = {"Mark", "Jacob", "Andre", "Thomas", "Hellboy"};
float lap_time[10];
以及一个
srand
函数,该函数为每个驾驶员生成随机的“圈速”,并将圈速存储到
数组中

char* drivers[10] = {"Mark", "Jacob", "Andre", "Thomas", "Hellboy"};
float lap_time[10];
我需要分别对它们进行排序,以获得“前1名”和“后1名”,我正在考虑使用冒泡排序,但它似乎没有按应有的方式工作。它会产生一个错误。总线故障或类似故障。如果我删除
strcpy()
部分,它也可以正常工作。但是与strcpy()相关的东西有一个错误

这只是排序功能,其他功能都可以完美运行。当
strcpy()
char tmp[]
数组一起添加时,此函数将崩溃

此函数的
printf()
。只是让我的
strcpy()
正常工作有问题

分类:

#define maks 10; 

int Fastestdriver(char* drivers[], float lap_times[], char tmp[maks])
{
    int i, j, a;

    for (i = 0; i < 10; ++i)
    {
        for (j = i+1 ; j < 10 ; ++j)
        {
            if (lap_time[i] < lap_time[j])
            {
                a =  lap_time[i];
                lap_time[i] = lap_time[j];
                lap_time[j] = a;
                strcpy(tmp, drivers[i]);
                strcpy(drivers[i], drivers[j]);
                strcpy(drivers[j], tmp);

            }
        }
    }

    return 0;
}
#定义maks 10;
int Fastestdriver(字符*驱动器[],浮点圈数[],字符tmp[maks])
{
int i,j,a;
对于(i=0;i<10;++i)
{
对于(j=i+1;j<10;++j)
{
if(圈时间[i]<圈时间[j])
{
a=圈时间[i];
圈时间[i]=圈时间[j];
圈时间[j]=a;
strcpy(tmp,驱动程序[i]);
strcpy(驱动因素[i],驱动因素[j]);
strcpy(驱动因素[j],tmp);
}
}
}
返回0;
}

您已经这样声明和初始化了-

char* drivers[10]={"Mark", "Jacob", "Andre", "Thomas", "Hellboy"};
驱动程序[0]
驱动程序[1]
是字符串文字(常量-不应修改),在函数中,您尝试使用
strcpy
修改它们,因此出现了此问题-

strcpy(drivers[i], drivers[j]);
strcpy(drivers[j], tmp);
您可以只为彼此分配指针-

char *tmp;                 // declare char * not char [] 
...
tmp=drivers[i];
drivers[i]=drivers[j];
drivers[j]=drivers[i];

您已经像这样声明和初始化了-

char* drivers[10]={"Mark", "Jacob", "Andre", "Thomas", "Hellboy"};
驱动程序[0]
驱动程序[1]
是字符串文字(常量-不应修改),在函数中,您尝试使用
strcpy
修改它们,因此出现了此问题-

strcpy(drivers[i], drivers[j]);
strcpy(drivers[j], tmp);
您可以只为彼此分配指针-

char *tmp;                 // declare char * not char [] 
...
tmp=drivers[i];
drivers[i]=drivers[j];
drivers[j]=drivers[i];

驱动程序是一个包含十个元素的数组。“驱动程序”的元素是指针。它们指向小型匿名静态数组,例如,“Mark”指向一个包含五个字符M、a、r、k和\0的数组

你可以交换这些指针


您正在尝试使用strcpy:例如,“Mark”是指向一个包含五个字符的数组的指针,“Jacob”是指向一个包含六个字符的数组的指针。你不能用strcpy换车,因为“Jacob”不适合存放“Mark”的地方。而且,这些数组很可能是只读的,因此即使所有数组都具有相同的长度,任何更改这些数组的尝试都会崩溃

驱动程序是一个包含十个元素的数组。“驱动程序”的元素是指针。它们指向小型匿名静态数组,例如,“Mark”指向一个包含五个字符M、a、r、k和\0的数组

你可以交换这些指针


您正在尝试使用strcpy:例如,“Mark”是指向一个包含五个字符的数组的指针,“Jacob”是指向一个包含六个字符的数组的指针。你不能用strcpy换车,因为“Jacob”不适合存放“Mark”的地方。而且,这些数组很可能是只读的,因此即使所有数组都具有相同的长度,任何更改这些数组的尝试都会崩溃

更改为
char*tmp=drivers[i];驱动因素[i]=驱动因素[j];驱动因素[j]=tmp此处不需要使用strcpy。只是在指向字符串的指针之间来回移动。这是如何编译的<代码>#定义maks 10
不应该有分号。define maks 10这是我的错误,没有对
char*tmp=drivers[i]的分号更改;驱动因素[i]=驱动因素[j];驱动因素[j]=tmp此处不需要使用strcpy。只是在指向字符串的指针之间来回移动。这是如何编译的<代码>#定义maks 10
不应该有分号。define maks 10这是我的错误,没有分号