ich habe ein problem mit der funktion fgets: Das Programm soll aus der Datei die Zeilen auslesen und in das Array daten1 reinschreiben. Allerdings wird in der letzten for-Schleife immer nur die letzte eingelesene Zeile angezeigt. Wird das nur nicht richtig angezeigt oder sind die Einträge wirklich falsch? Und wenn sie falsch sind, verstehe ich beim besten Willen nicht warum!! #include <stdio.h> #include <math.h> #include <string.h> #define Laenge_Datei (348) int main() { int k,n; char daten[20]={0}; char *daten1[Laenge_Datei]={0}; FILE *datei; datei=fopen("C-T-exp.dat","r"); if(datei!=0) { for(n=0;n<Laenge_Datei;n++) { daten1[n]=fgets(daten,100,datei); } } else { printf("Datei konnte nicht geöffnet werden.\n"); } for(k=0;k<200;k++) { printf("%s",daten1[k]); } fclose(datei); return 0; }
Eva schrieb:
> char *daten1[Laenge_Datei]={0};
Du hast hier ein Array von Pointern.
Aber wo ist der Speicherbereich in den deine Texte abgelegt werden?
char daten1[Laenge_Datei][Laenge_einer_Zeile];
Du hattest Pech, dass dein Programm nicht einfach sang und klanglos
abgeschmiert ist, dann haettest du das Problem eher bemerkt.
Der Rückgabewert von fgets zeigt immer auf den Buffer wo der String abgelegt wurde, also auf char daten[20]={0}. Logischer Weise ist das immer die letzte Zeile, da die Ausgabe ja nach dem ganzen Einlesen passiert. Zudem solltest du auch bedenken, dass du mit fgets 100 Zeichen einliest und die in ein Array schreibst, das nur 20 Bytes groß ist.
Danke für die Antworten! Wie bekomme ich das dann hin, dass er die Zeilen in das zweidimensionale Array reinschreibt? Ich hab das mal ausprobiert, wie ich mir das denke, aber jetzt funktioniert gar nix mehr!
Du solltest dir dringend ein C-Buch zulegen. Stringhandling, Arrayandling, Filehandling. Das sind alles Grundlagen.
1 | int main() |
2 | {
|
3 | int k,i,j,n; |
4 | char daten[L_zeile]={0}; |
5 | char daten1[L_datei][L_zeile]={0}; |
6 | FILE *datei; |
7 | datei=fopen("C-T-exp-Kopie.dat","r"); |
8 | |
9 | if(datei!=0) |
10 | {
|
11 | for(n=0;n<L_datei;n++) |
12 | {
|
13 | fgets(datenl[n],50,datei); |
14 | }
|
15 | }
|
16 | else
|
17 | {
|
18 | printf("Datei konnte nicht ge?et werden.\n"); |
19 | }
|
20 | |
21 | for(k=0;k<L_datei;k++) |
22 | {
|
23 | printf("%s",daten1[k]); |
24 | printf("\n%d\n",k); |
25 | }
|
26 | fclose(datei); |
27 | return 0; |
28 | }
|
Das heist nicht, das obiges Programm jetzt so wahnsinnig schlau ist. Das ist es nicht. Aber es korrigiert zumindest die wichtigsten Fehler im Stringhandling. (PS: Merkregel - bei einem mehrdimensionalen Array läuft der letzte Index am schnellsten. daten1 willst du daher so anordnen, dass der erste Index die Zeilen sind, während der zweite Index die Character in einer Zeile sind.)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.