Dies ist die Sprache C. Wenn ich mein folgendes Programm starte, egal wie klein ich gebe, erhalte ich einen Laufzeitsegmentierungsfehler. Bitte helfen Sie mir, die Ursache dafür herauszufinden.Bitfelder mit Segmentierungsfehler
#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;
}
Bitfelder in C haben eine Menge Macken, also würde ich empfehlen, dass Sie sie vermeiden, wenn Sie sie wirklich brauchen. Für den obigen Code könnten Sie 'struct date {uint8_t day; uint8_t Monat; uint16_t Jahr; }; ', und Sie erhalten wahrscheinlich die gleiche Größe Struktur, die gleich oder leistungsfähiger und vielseitiger ist (Sie können die Adresse der Mitglieder nehmen). – user694733