在C中对结构数组进行排序时出现问题
我想按学生姓名的第一个字母排列结构数组。到目前为止,我编写的代码如下:在C中对结构数组进行排序时出现问题,c,struct,C,Struct,我想按学生姓名的第一个字母排列结构数组。到目前为止,我编写的代码如下: #include <stdio.h> #include <stdlib.h> typedef struct{ int cod; char* name; int mark; }student; void print(student* class){ int i; for (i=0;i<4;i++){ printf("%d\n",cl
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int cod;
char* name;
int mark;
}student;
void print(student* class){
int i;
for (i=0;i<4;i++){
printf("%d\n",class[i].cod);
printf("%s\n",class[i].name);
printf("%d\n",class[i].mark);
printf("\n");
}
}
int main(int argc, char *argv[])
{
int ind,i;
int cod=1000;
student class[4];
student temp;
int lengthData=10;
for (i=0;i<4;i++)
{
class[i].name=malloc(sizeof(char)*lengthData);
}
class[0].cod=cod;
class[0].name="Joseph";
class[0].mark=15;
cod++;
class[1].cod=cod;
class[1].name="Jonathan";
class[1].mark=16;
cod++;
class[2].cod=cod;
class[2].name="Karen";
class[2].mark=17;
cod++;
class[3].cod=cod;
class[3].name="Anna";
class[3].mark=20;
print(class);
for (ind=1;ind<4;ind++){
temp=class[ind];
i=ind-1;
while (i>=0){
if (temp.name[0]<class[i].name[0]){
class[i+1]=class[i];
class[i]=temp;
i--;
}
else break;
}
}
printf("ordered data\n");
print(class);
system("PAUSE");
return 0;
}
#包括
#包括
类型定义结构{
国际化学需氧量;
字符*名称;
整数标记;
}学生;
作废打印(学生*班级){
int i;
对于(i=0;i您有很多问题:
首先,您泄漏内存,因为您分配内存并使name
指向该位置,然后使name
指向其他位置。您需要复制到您分配的内存中
其次,同样对于name
成员,一旦复制到内存中,您就会越界,因为您只为每个字符串分配五个字节,但您的字符串至少有九个字符(十个带有终止符)
第三,关于越界,您的类
数组只有三个元素,但您可以访问数组的四个元素
重新分配名称
指针不会造成比临时内存泄漏更多的问题,因为您不会尝试将指针传递到空闲
。第二个问题不是真正的问题,因为您尚未复制字符串。另一方面,第三个问题是,一旦执行该代码,就会导致内存泄漏你有很多问题:
首先,您泄漏内存,因为您分配内存并使name
指向该位置,然后使name
指向其他位置。您需要复制到您分配的内存中
其次,同样对于name
成员,一旦复制到内存中,您就会越界,因为您只为每个字符串分配五个字节,但您的字符串至少有九个字符(十个带有终止符)
第三,关于越界,您的类
数组只有三个元素,但您可以访问数组的四个元素
重新分配名称
指针不会造成比临时内存泄漏更多的问题,因为您不会尝试将指针传递到空闲
。第二个问题不是真正的问题,因为您尚未复制字符串。另一方面,第三个问题是,一旦执行该代码,就会导致内存泄漏我已经修复了2和3,但仍然出现意外行为,有什么问题吗?谢谢,它工作了,谢谢,我会尝试修复1号我已经修复了2和3,但仍然出现意外行为,有什么问题吗?谢谢,它工作了,谢谢,我会尝试修复1号
class[3]=class[2];
printf("%s\n",class[3].name);
for (ind=1;ind<4;ind++){
...