所以我有一个例子array
:
char* drivers[10] = {"Mark", "Jacob", "Andre", "Thomas", "Hellboy"};
srand
函数可生成随机"单圈时间"对于每个驱动程序并将laptime存储到array
:
float lap_time[10];
我需要分别对它们进行排序以获得" Top 1"和#34;最后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;
}
答案 0 :(得分:3)
你已经声明并初始化了这个 -
char* drivers[10]={"Mark", "Jacob", "Andre", "Thomas", "Hellboy"};
drivers[0]
,drivers[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];
答案 1 :(得分:3)
drivers是一个包含十个元素的数组。 &#34;驱动程序&#34;的元素是指针。它们指向小型无名静态数组,例如&#34; Mark&#34;指向具有五个字符M,a,r,k和\ 0的数组。
你可以交换这些指针。
你在尝试使用strcpy:例如,&#34; Mark&#34;是指向具有五个字符的数组的指针,&#34; Jacob&#34;是指向六个字符数组的指针。你不能用strcpy交换汽车,因为&#34; Jacob&#34;不适合哪里&#34; Mark&#34;被储存了。而且,这些数组可能是只读的,因此即使所有内容都具有相同的长度,任何更改这些数组的尝试都会崩溃。