2017-05-29 4 views
0

Ich spare die Elemente des Arrays mit fwrite und ich versuche, die zuvor gespeicherten Daten in das Array mit fread zu laden. Der Rückgabewert von fread ist nicht Null, was bedeutet, dass es erfolgreich war. Aber wenn ich das Array drucke, ist es leer, nichts wird gedruckt. Ich habe das Array in einer Datei gespeichert alsladen Array aus einer Datei

fwrite(num, sizeof(int), k, q); //num is the same array, k=no of elements, q is the file pointer 

Hier ist mein Code:

int num[50], NoOfElement; 
FILE *p; 
if(p = fopen("data.txt", "rb") == NULL) 
{ 
    printf("Error"); 
    exit(1); 
} 
fseek(p, 0, SEEK_END); 
NoOfElement = ftell(p)/sizeof(int); //no of elements in the file 
fseek(p, 0, SEEK_SET); 
fread(num, sizeof(int), NoOfElement, p); 
+1

'p'? 'befreit' ??? –

+0

Array darf nicht leer sein. –

+0

Sorry, Es ist 'fread' und' p' ist der Dateizeiger –

Antwort

1

Ihr Code scheint in Ordnung. Dieses Demo-Programm funktioniert OK für mich:

#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    int num[50], NoOfElement; 
    FILE *P; 
    int i; 

    // Generate test data 
    for (i = 0; i < 5; ++i) 
     num[i] = i+1; 

    // Write test data 
    P = fopen("data.txt", "wb"); 
    fwrite(num, sizeof(int), 5, P); 
    fclose(P); 

    // Overwrite the test data so we know we read it OK 
    for (i = 0; i < 5; ++i) 
     num[i] = -1; 

    // Your code for reading test data 
    if((P = fopen("data.txt", "rb")) == NULL) 
    { 
     printf("Error"); 
     exit(1); 
    } 
    fseek(P, 0, SEEK_END); 
    NoOfElement = ftell(P)/sizeof(int); //no of elements in the file 
    fseek(P, 0, SEEK_SET); 
    fread(num, sizeof(int), NoOfElement, P); 

    // Output test data (shows 1 -> 5 as expected) 
    for (i = 0; i < NoOfElement; ++i) 
     printf("%d\n", num[i]); 
} 
+0

Ich glaube nicht, dass es funktioniert .. Kann es sein, zeigt die Werte direkt aus dem Array, nicht aus die Datei –

+0

@mukeshbhadotri Es funktioniert. Ich schreibe die Werte in meinem Beispiel speziell auf "-1", um zu beweisen, dass die ursprünglichen Werte nicht angezeigt werden. Sie müssen aus der Datei in den Speicher zurücklesen - Sie zeigen nichts "aus der Datei". Sie können meinen Code kopieren und einfügen und ihn zur Überprüfung selbst ausführen. – aardvarkk

0

Es gibt zwei Probleme, die ich sehen kann. Der erste ist, dass Sie eine nicht deklarierte Variable verwenden (Sie hatten FILE *P; deklariert und C ist Groß-und Kleinschreibung).

Aber angenommen, das war ein Tippfehler in der Transkription und nicht in Ihrem eigentlichen Code, haben Sie auch ein Pufferüberlauf Problem. Wenn NoOfElement > 50, werden Sie undefiniertes Verhalten aufrufen und (möglicherweise) Ihren Stack beschädigen.

Wie drucken Sie das Array auf jeden Fall.

+0

'NoOfElement' wird niemals größer als 50, weil ich zuerst keine Bytes der Datei berechne und sie mit' sizeof (int) 'dividiere. also wird es immer weniger als 50 sein. weil Elemente (> 50) dieses Arrays in dieser Datei gespeichert sind, kann es nicht höher sein als ein Wert –

+0

Aber die Datei könnte größer sein als '50 * sizeof (int)' (200, unter Annahme von 32-Bit-Bytes) –

+0

'50 * sizeof (int) = 200bytes' aber' NoOfElement = 200bytes/sizeof (int) '(Ergebnis ist 50) –

Verwandte Themen