minicrispie: Datenbank mit C benutzen

Beitrag lesen

Hallo,

Hallo Ludwig,

nee ... Christoph. Ludwig ist nur der Nachname ;)

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.

Ja ok. außer das Fenster-Handle(HWND hWnd) habe ich keine Globalen Variablen und ich bin mir bewusst, das es besser ist, Zeiger zu verwenden und auf Globale Variablen zu verzichten.
(Coding-Style)

Du musst Dich dringend mit Zeigern und mit Parameterübergabe beschäftigen, sonst kommst Du in C nicht weit.

das wird nicht einfach, da ich diese Funktionen, die auf die struktur zufgreifen als Prozedur eines Dialoges aufrufe. Somit kann ich der Funktion keine Parameter übergeben.
die Zeiger an sich wären kein Problem, da ich mich weitestgehend damit auskenne.

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.

Buffer-überlauf? Glaube ich nicht, da alle Felder in der Datei eine Feste länge haben und ich demnach nur die arrays entsprechend der Anzahl dynamisch erzeuge(malloc).
oder welche Datentypen schlägst du bei
   EAN          -> 13 Zahlen       -> long array[AnzahlDatensätze]
   Artikel-Name -> max. 20 Zeichen -> char array[AnzahlDatensätze][21]
   Preis        -> max. 999,99€    -> float array[AnzahlDatensätze]
   Steuersatz:  -> 7% bzw. 19%     -> int array[AnzahlDatensätze]
vor? (Dahinter stehen meine Datentypen. Sind diese zu klein?)

Steigt Dein REchner schon nach einem Lesevorgang (einem Schleifendurchlauf) aus?

nein, jetzt hängt er sich gar nicht mehr auf. Jetzt ist nur das Problem, das er mir sch*** ... suboptimale ergebnisse ausgibt.

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.

ok. Ich werds mal versuchen.

Denkst Du bei Deinen Strings dran, dass sie immer ein Byte mehr für die Ende-Kennung brauchen?

ja, deswegen die zeile (char*) malloc(21 * sizeof(char));

MfG. Christoph Ludwig

--
Wo die Sprache aufhört, fängt die Musik an...
Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
Go to this