Malloc und C

hallo pinguine,

die frage ist ein bissche off-topic, aber da ich denke, auf der liste
gibt es garantiert ein paar C-gurus will ich mal nachfragen.
ich habe folgendes problem: ich möchte ein script schreiben, dass ein
file einliest in dem mit tabulator getrennte datensätze stehen und
diese in einer c-struktur abspeichern.

die struktur schaut folgendermaßen aus:
typedef struct player {
  char name[30];
  char surname[30];
  char country[3];
}

nun möchte ich mit malloc wenn nötig speicherplatz reservieren, damit
ich nicht von der anzahl der datensätze im file abhängig bin. wie ist
das möglich?

bzw. ich habs eigentlich schon gelöst, es kann aber eindeutig nicht die
lösung sein, da ich nur einmal folgenden code eingegeben habe:
player_t *players;
players = (player_t *)malloc(sizeof(player_t));

und seitdem kann ich soviele daten einlesen wie ich einlesen will.

mfg
lukas

: lukas pitschl | dressy vagabonds

player_t *players;
players = (player_t *)malloc(sizeof(player_t));

Das reserviert Platz fuer _ein_ Record.

und seitdem kann ich soviele daten einlesen wie ich einlesen will.

Oder bis zum naechsten segmentation fault... :slight_smile:

Bye, Chris.

hallo pinguine, die frage ist ein bissche off-topic, aber

    > da ich denke, auf der liste gibt es garantiert ein paar
    > C-gurus will ich mal nachfragen. ich habe folgendes
    > problem: ich möchte ein script schreiben, dass ein file
    > einliest in dem mit tabulator getrennte datensätze stehen
    > und diese in einer c-struktur abspeichern.

    Hi Lukas ... just could not resist (after spending 15 minutes
    trying to remember C).

    bye, Luca

Noch eine letzte Frae zu C, dann geb ich endgültig ruhe.

Was hat es mit warning: passing arg 4 of `qsort' from incompatible
pointer type auf sich, wenn der folgende code fehlschlägt. die message
bezieht sich auf die qsort-zeile

Noch eine letzte Frae zu C, dann geb ich endgültig ruhe.

    > Was hat es mit warning: passing arg 4 of `qsort' from
    > incompatible pointer type auf sich, wenn der folgende code
    > fehlschlägt. die message bezieht sich auf die qsort-zeile

    La signature della funzione di comparazione è:

  int func (const void *a, const void *b)

    quindi, per esempio...

#include <stdlib.h>

typedef struct player {
  int rating;
} player_t;

player_t ** players;
int num_of_players;

int ratingCompare(const void *a, const void *b)
{
     player_t * p = (player_t *)(a);
     player_t * q = (player_t *)(b);
     int diff = p->rating - q->rating;
     
     if (diff == 0) return 0;
     if (diff > 0) return 1;
     return -1;
}

void sortByRating() {
  qsort(players, num_of_players, sizeof(player_t *), ratingCompare);
}

da musst du die deklaration von qsort() mitschicken, sonst kann man
nicht viel sagen.
der 4. parameter muss jedenfalls als vom typ:
int (const player_t *, const player_t *)
definiert sein.

peter

Noch eine letzte Frae zu C, dann geb ich endgültig ruhe.

Was hat es mit warning: passing arg 4 of `qsort' from incompatible
pointer type auf sich, wenn der folgende code fehlschlägt. die message
bezieht sich auf die qsort-zeile

da musst du die deklaration von qsort() mitschicken, sonst kann man
nicht viel sagen.
der 4. parameter muss jedenfalls als vom typ:
int (const player_t *, const player_t *)
definiert sein.

Ich glaube Lukas verwendet qsort aus der Standardbibliothek, das
wie Luca schon gesagt hat eine Funktion vom Typ
    int (const void *, const void *)
moechte.

Die Funktionen der C Standardbibliotheken sind in den Manual Seiten
erlaeutert, wenn mal keine Referenz zur Hand ist:
    man qsort

Viele Gruesse,
Chris.