使用strcpy进行冒泡排序

时间:2015-12-09 17:37:53

标签: c arrays sorting

所以我有一个例子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;
}

2 个答案:

答案 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;被储存了。而且,这些数组可能是只读的,因此即使所有内容都具有相同的长度,任何更改这些数组的尝试都会崩溃。