gaelim   6년 전

C의 qsort 함수를 이용하고, 순서를 지정해서 stable 하게 만들어 주었습니다.(라고 생각하고있습니다.) 어떤 예외상황이 있을까요?


#include <stdio.h>
#include <stdlib.h>

typedef struct _p {
int order;
int age;
char name[100];
}PEOPLE;

int mycmp(const void *a, const void *b) {

const PEOPLE *sa = (const PEOPLE *)a;
const PEOPLE *sb = (const PEOPLE *)b;
int age=sa->age - sb->age;
return age !=0? age: sa->order - sb->order;
}

int main() {

int i, num;
PEOPLE guest[100000];

//init
scanf("%d", &num);
for (i = 0; i<num; i++)
scanf("%d %s", &guest[i].age, guest[i].name);
for (i=0; i<num;i++)
  guest[i].order=i;

qsort(guest, num, sizeof(PEOPLE), mycmp);

for (i = 0; i<num; i++)
printf("%d %s\n", guest[i].age, guest[i].name);
return 0;
}

gaelim   6년 전

아 뭐지...음... 이름 배열 크기를 변경하니까 되네요 

gaelim   6년 전

ㅎ ㅏ처음에 stable, unstable이 문제인줄알고 고민했는데.. 걍 배열크기문제였네요...

gaelim   6년 전

그런데 문제에서 이름의 크기가 100자라고 했는데 왜 char arr[101] 로 설정해줘야하나요?  너무 궁금하네요.... null 값 문제는 아닌거같은데...


henry1214   6년 전

문자열을 받을 때 끝에 '\0' 널문자가 추가로 들어가기 때문에 최대 크기+1로 문자열 크기를 할당해 주어야 합니다.

gaelim   6년 전

@henry1214 감사합니다

댓글을 작성하려면 로그인해야 합니다.