排序结构体数组时出现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
相关产品推荐
相关产品推荐

