fgets an array übergeben

Gast #1296653
Lesenswert?

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;
}
Angehängte Dateien:
#1296675
Lesenswert?

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.
#1296697
Lesenswert?

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.
#1297177
Lesenswert?

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.)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren