You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

排序结构体数组时出现cannot convert ‘student’ to ‘char*’错误的解决

结构体数组排序错误修复

你定义的student结构体数组如下:

struct student
{
    int mark;
    char name[30], surname[30];
}s[101];

你想用冒泡排序按name字典序排序,name相同时按surname排序,写的代码却触发了编译错误:

error: cannot convert ‘student’ to ‘char*’

错误原因

你用了strcpy()来复制整个student结构体变量,但strcpy()的设计目的是复制字符串,它的两个参数都要求是char*类型。而aux、s[i]、s[j]都是student结构体类型,和char*不兼容,所以编译器报错。

修正后的代码

C语言支持直接对结构体变量进行赋值操作,会自动逐成员完成复制(包括结构体里的字符数组),把所有strcpy替换成直接赋值即可:

int i, j;
struct student aux; // C标准中需加struct,若想省略需提前用typedef定义
for(i = 0; i < 100; i++)
{
    for(j = i + 1; j < 101; j++)
    {
        if(strcmp(s[i].name, s[j].name) > 0)
        {
            aux = s[i];
            s[i] = s[j];
            s[j] = aux;
        }
        else if(strcmp(s[i].name, s[j].name) == 0 && strcmp(s[i].surname, s[j].surname) > 0)
        {
            aux = s[i];
            s[i] = s[j];
            s[j] = aux;
        }
    }
}

如果想省略struct关键字直接用student作为类型名,可以给结构体加typedef:

typedef struct student
{
    int mark;
    char name[30], surname[30];
} student;
student s[101];

这样后续就能直接用student定义变量,不用每次都写struct student。

内容的提问来源于stack exchange,提问作者NoobieCodie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 13:40:25