int 값을 기반으로 struct에서 구조체 배열을 정렬하려고합니다. 나는 구조체의 배열을 성공적으로 정렬했지만 중첩 된 구조체의 어딘가에 잘못된 값을 전달하고 있다고 생각합니다.qsort 구조체의 배열 구조체 배열
배열의 구조체에 a 값만 정렬하면됩니다. 나는 비교 기능이
struct s2{
int a;
int b;
};
struct s1{
int c;
struct s2 arr[10];
}
:
구조체는 다음과 같이 설정되어
int comp(const void *a, const void *b){
struct s1 *q1 = (struct s1 *)a;
struct s1 *q2 = (struct s1 *)b;
return(q1->arr->a - q2->arr->a);
}
을 그리고 qsort가 호출
: 입력을 위해struct s1 myStruct;
size_t theLen = sizeof(myStruct.arr)/sizeof(struct s2);
qsort(myStruct.arr, 10, theLen, comp);
을
10, 5, 7, 20, 17, 9, 3, 11, 15, 1
내가 얻을 출력 : 내가 추측하고있어
2147451181, 589824, 327680, 65536, 131072, 4, 5, 11, 15, 8
내가 길이를 선언하는 방법을 함께 할 수있는 뭔가 할 수있다?
감사합니다.
파일 라인은 :
10 5 7 20 17 9 3 11 15 1
myStruct.arr는 fgets와 sscanf를 사용하여 파일을 입력으로 충전된다 [I] .A :
fgets(t, sizeof(t), fp);
sscanf(t, "%d,...,%d", &myStruct.arr[0].a,...,&myStruct.arr[9].a);
myStruct.arr [I]은 .B을 당신은정렬되어
for(int i = 0; i < 10; i++){
myStruct.arr[i].b = i+1;
}
버려진 const 한정자이기 때문에 OP 캐스트가 잘못되었습니다 (쓸모없는'void const *'는 자동 승격입니다) : struct s2 const * q1 = a; struct s1 const * q2 = b; ' – Stargateur
@Stargateur 감사합니다. 메모를 추가하겠습니다. –