這是C語言。當我運行我的以下程序時,無論我給出的值多少,我都會收到運行時分段錯誤錯誤。請幫我找出原因。給出分段錯誤的位域
#include <stdio.h>
#include <stdlib.h>
struct date
{
unsigned day:
5;
unsigned month:
4;
unsigned year:
12;
};
struct emp
{
char name[10];
struct date d;
};
int compare(const void * a, const void * b)
{
struct emp *orderA = (struct emp *)a;
struct emp *orderB = (struct emp *)b;
return ( orderA->d.year - orderB->d.year );
}
int main()
{
int i;
struct emp e[5];
for (i = 0;i < 5;i++)
{
scanf("%s %d %d %d", e[i].name, e[i].d.day, e[i].d.month, e[i].d.year);
}
qsort(e, 5, sizeof(struct emp), compare);
for (i = 0;i < 5;i++)
{
printf("%s %d %d %d\n", e[i].name, e[i].d.day, e[i].d.month, e[i].d.year);
}
return 0;
}
C中的Bitfields有很多怪癖,所以我會建議你避免它們,除非你真的需要它們。對於上面的代碼,你可以使用'struct date {uint8_t day; uint8_t月; uint16_t年; };',並且您可能會得到相同或更高性能的結構,並且功能更多(可以使用成員地址)。 – user694733