Mit stdlib ist qsort() sortiert ein array von strings

Einige Vorwort: ich bin ein computer-engineering-student ein Erster Klasse in C nach 3 Semestern Java (bis zu Datenstrukturen). Diese Frage ist in Bezug auf eine Hausaufgabe, sondern ein paar Schritte entfernt von der Lösung für mich.

Habe ich eine input-Datei, die ich in den Speicher gelesen, so dass es gespeichert char[9][500]. Ich lese in höchstens 500 strings der maximalen Länge 8. Ich bin versucht zu Sortieren dieses Arrays mittels stdlib built-in qsort () - Funktion, und bin mit einigen memory-Fehler.

Wichtige code-Schnipsel:

char data[4][500][60];
char debug[500][9];
size_t count = 0;

/* initialize file, open for reading */
FILE* pUserlog;
pUserlog = fopen("userlog","r");

while(!feof(pUserlog))
{
    fscanf(pUserlog, "%9s %8s %16s",debug[count], data[1][count], data[2][count]);
    fgets(data[3][count], 60, pUserlog);
    count++;
}

Dieser Abschnitt liest die Daten in den arrays. Das array von Interesse sind in diesem Teil die "debug". Dies ist das array oben angegeben. Hier ist meine Vergleichsfunktion für qsort:

int compare(const void* a, const void* b)
{
    const char **ia = (const char **)a;
    const char **ib = (const char **)b;
    puts("I'm in compare!");
    return strncmp(*ia, *ib,8);
}

Dies ist mein Versuch, call qsort:

size_t debug_len = sizeof(debug)/sizeof(char*);
printf("debug len: %d, count: %d, sizeof(char*): %d\n",debug_len,count,sizeof(char*));
qsort(debug,count, sizeof(char *), compare);

Ich versuchte, ersetzen debug_len in meinem Anruf wo Graf ist, aber ich bin immer noch segfaulting. Hier ist die Ausgabe:

$ ./test 
debug-len: 1125, Anzahl: 453, sizeof(char*): 4 
Ich bin im vergleichen! 
Segmentation fault (core dumped) 

Danke!

  • while( !feof() ) ist falsch. feof false zurück, wird die Schleife eingetragen wird, die scanf wird scheitern, Daten zu Lesen, zu Debuggen[ count ] enthält falsche Daten, und dann feof true zurück. Sie können dieses Problem beheben, case-by-doing-zählen-nach der Schleife, aber generell sollte man einfach nicht tun, während( !feof())
  • Wo kommt der segfault? Es ist eine gute übung, um zu untersuchen core-dump zu bestimmen, wo der segfault passiert, als dass in der Regel sagt Ihnen, was das problem ist.
InformationsquelleAutor Andy | 2011-03-20
Schreibe einen Kommentar