Stefanie: Datenbank mit C benutzen

Beitrag lesen

Hallo Ludwig,

zu den structs und den globalen Parametern:

C ist eine mächtige Sprache, und man darf als Entwickler einfach nicht alles machen, was sie einem erlaubt. So sollte man auf globale Variablen weitestgehend verzichten, weil sie fehlerträchtig sind und die Fehler sich auch noch schwer finden lassen. Du musst Dich dringend mit Zeigern und mit Parameterübergabe beschäftigen, sonst kommst Du in C nicht weit.

Eine Struktur, genauso wie ein Array machst Du in einer Funktion nutzbar, in dem Du einen Zeiger darauf als Parameter überträgst. Den Zeiger erhälst Du über & also z.B. beim Funktionsaufruf Funktionsname(&meineStruktur). Innerhalb der Funktion referenzierst Du den Inhalt eines Zeigers über *. Also z.B. *pMeineStruktur.elementname (da der Übergabeparameter ein Zeiger ist, ist es sinnvoll, seinen Namen mit p (wie Pointer) auch so zu kennzeichnen). Oder bei Strukturen kannst Du auf die Elemente einer verzeigerten Struktur bequem so zugreifen: pMeineStruktur->elementname.

Zu Deinem Problem:

Bei Deinem Fehler tippe ich auf einen Buffer-Überlauf. Das Einlesen der Daten mittels scanf ist prädestiniert für so etwas, da scanf ja die Länge der gelesenen Daten nicht überprüft, sondern gnadenlos in den angegebenen Speicherbereich schreibt, auch wenn der reservierte Buffer dafür zu klein ist. Wieviel Byte stehen auf Deinem System für long-Variablen zur Verfügung? Du bräuchtes sechs.

Steigt Dein REchner schon nach einem Lesevorgang (einem Schleifendurchlauf) aus? Lies doch jeweils erstmal nur die einzelnen Zeilen mit einem zeilenorientierten Lesebefehl. Und dann parst Du die einzelnen Zeilen in Deine Struktur. Du kannst sie auch erst noch in einzelne Strings für jeden Parameter zerlegen. So kannst Du Schritt für Schritt heraus finden, wo der Fehler liegt. Denkst Du bei Deinen Strings dran, dass sie immer ein Byte mehr für die Ende-Kennung brauchen?

Ciao, Stefanie