c - 使用 strcpy 进行冒泡排序

标签 c arrays sorting

所以我有一个示例 array:

char* drivers[10] = {"Mark", "Jacob", "Andre", "Thomas", "Hellboy"};

还有一个 srand 函数,它为每个司机生成随机的“单圈时间”并将单圈时间存储到一个数组:

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;
}

最佳答案

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

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];

关于c - 使用 strcpy 进行冒泡排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34185368/

相关文章:

c - 将 BST 传递给结构数组

iphone - 使用谓词过滤数组中对象的属性

javascript - 平面 JSON 展开为具有多个父级的层次结构作为字符串

arrays - 如何在 O(n) 运行时间和 O(1) 空间复杂度内重组数组?

c - 为什么我在这个列表中得到垃圾值

c - 指向结构的指针数组

javascript - 在 Javascript 中构建嵌套的 JSON

java - 使用数组列表按升序和降序排列字符串

javascript - 按两项对一维数组进行排序

c - 删除c中链表中的元素