Problem mit Programm C nach Windows Update
-
Nanu, wo ist mein Beitrag denn hin? Habe ich den versehentlich nicht abgeschickt?
Was ich sagen wollte: Was meinst du genau mit "funktioniert nicht"?
Außerdem schmeißt der Code bei mir zahlreiche Compilerwarnungen, könnte irgendein undefiniertes verhalten sein.
-
sekunde gebe gleich mal nen scrrener
-
das der compiler herummeckert ist mir auch schon bewusst, jedoch lässt sich die exe z.b. auf win xp mit sp2 ohne probs laufen, mit sp3 auch, nur nicht mit updates der letzten monate...
-
muss passen hab hier 64bit win7,... muss auf screener bis morgen warten...
normal müsste nur ein fehler kommen, das kein aktueller tag ermittelt werden konnte..
-
korrektur, es kommt die meldung, xyz.exe funktioniert nicht mehr...
-
habe eben noch die ereignisanzeige von windows mit hochgeladen, die zu dem fehler kommt. soweit ich mich entsinne ist sie bei windows 7 (was ich jetzt benutzte) und windows xp gleich.
-
Wie sieht denn die konfig.txt aus?
-
konfig.txt?
-
Na die, die das Programm zu lesen versucht. Wenn hierbei
konfigfile = fopen ("konfig.txt","r"); fgets(dummy,81,konfigfile); fgets(dummy,81,konfigfile); for (int i=0;i<=6;i++) { fgets(awt[i].ksjh,3,konfigfile); fgets(awt[i].ksj,3,konfigfile); fgets(dummy,2,konfigfile); fgets(awt[i].ksm,3,konfigfile); fgets(dummy,2,konfigfile); fgets(awt[i].kst,3,konfigfile); fgets(dummy,36,konfigfile); fgets(dummy,2,konfigfile); } fgets(kalwo,3,konfigfile); fclose(konfigfile);
keine konfig.txt vorhanden ist, kann das ja nur in die Hose gehen.
-
auch ohne diese datei startet das programm auf anderen rechnernm, bringt eben eine fehlermeldung. aber auf den neueren stürzt es im augenblick des aufrufes ab,....
-
Compiler-Warnungen kommen im Regelfall nicht ohne Grund.Die sollte man erst
mal wegmachen - Das haben wir schon in den 80gern unter DOS/VSE auf der
S/370 so gehandhabt.
-
if( !konfigfile ) perror("konfig.txt"),exit(EXIT_FAILURE);
würde schon mal helfen.
fgets liefert einen Returnwert, der ist für Fehlerbehandlung gedacht. Und genau dieser Fall ist bei dir eingetreten. Bist selbst Schuld, wenn du ihn nicht benutzt. Wie schon erwähnt; entweder ist die Datei gar nicht da oder es steht was anderes drin, als du erwartest oder deine argv-Parameter sind anders als du erwartest oder ...
-
KON ----HIER STEHT WAS DRIN----------- S10 ---HIER STEHT AUCH WAS DRIN--- 1980 09 27 ---1.Tag im Format jjjj mm tt--- 1980 09 28 ---2.Tag im Format jjjj mm tt--- 1980 09 29 ---3.Tag im Format jjjj mm tt--- 1980 09 30 ---4.Tag im Format jjjj mm tt--- 1980 10 01 ---5.Tag im Format jjjj mm tt--- 1980 10 02 ---6.Tag im Format jjjj mm tt--- 1980 10 03 ---7.Tag im Format jjjj mm tt--- 39 ---nn.Kalenderwoche im Format ww---
-
Wie man richtig (d.h. portabel, robust und fehlertolerant) aus einer Datei liest, siehst du z.B. unter http://www.c-plusplus.net/forum/viewtopic-var-t-is-273406.html. Das Beispiel habe ich erst vor kurzem geliefert, scheinbar scheint der Anwendungsfall "wie lese ich meine Daten aus einer Datei" häufig vorzukommen, aber oft auch suboptimal gelöst.
Auf dein Bsp. angewandt also in etwa:char zeile[100]; /* Zeilenlänge max. 99 */ int i=0; FILE *fp = fopen("konfig.txt","rt"); if( !fp ) perror("konfig.txt"),exit(1); *kalwo=0; while( fgets(zeile, sizeof zeile, fp) ) { if( i==7 && !*kalwo ) if( 1!=sscanf(zeile,"%2[0-9]",kalwo) ) *kalwo=0; if( i<sizeof awt/sizeof*awt ) if( 4==sscanf(zeile,"%2[0-9]%2[0-9] %2[0-9] %2[0-9]",awt[i].ksjh,awt[i].ksj,awt[i].ksm,awt[i].kst) ) ++i; } printf("\n%d Zahlen wurden gelesen",i); fclose(fp);
Ich stelle grade fest, dass deine Dimensionierung der o.g. Felder zu gering ist. Statt [2] muss es natürlich mind. [3] heißen, da du mit Stringoperationen darauf hantierst. Eigentlich hätte es schon immer knallen müssen.