用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这是我的错误,没有分号