2017-08-19 1 views
-4
FILE *f; 
f = fopen("PT.txt","r"); 

PT.txt haben soll: qwertyuiop '\ x20'asdfghjkl' \ x20'zxcvbnm '\ x0'Von Datei zu Zeichenzeiger

char *ppt; 
while(!feof(f)) 
{ 
    if(fgetc(f) != '\x20') 
     *(ppt+i) = fgetc(f);//taking from file 
    i++; 
} 

Aber die fgetc (Datei * Dateiname) überspringt Zeichen (mit Ausnahme von 'white space'), während ich den Debugging-Modus in DevC überprüft habe.

irgendwelche Vorschläge zur Verbesserung oder den Code zu ändern ..

+0

Sie lesen & Tests: Sie Überspringen 1 Zeichen aus 2. –

+0

neben 'feof' zu spät hier. –

+0

und ich hoffe, Sie 'ppt' zuweisen, sonst ist es einfach falsch ... aber Sie können nicht wissen, die Größe der Datei im voraus ... es sei denn, Sie fstat oder fseek/ftell, um die maximale Größe zu bekommen, zuzuteilen, dann Sie können Ihren Puffer füllen –

Antwort

2

Ich würde Sie malloc einige Speicher für ppt empfehlen. Da Sie die Menge der Daten in der Datei nicht kennen, würde ich seek beenden und dann die Anzahl der Zeichen in der Datei erhalten. - Und für diese Größe genügend Speicher zuweisen.

Auch Sie tun es falsch. Zuerst liest man das Zeichen und prüft, ob es '\x20' ist, dann liest man das nächste Zeichen, das man im Puffer speichert, ohne seinen Wert zu prüfen (es könnte das '\x20' sein und man würde es überspringen).

Hier ist ein Beispiel, wie es gemacht werden sollte.

FILE *f; 
f = fopen("PT.txt","r"); 

fseek(f, 0, SEEK_END); 
int len = ftell(f); 

char * ppt = malloc(len); 
unsigned n = 0; 
int c; 

while ((c = fgetc(file)) != EOF && c != '\x20') 
{ 
    ppt[n++] = (char) c; 
} 

ppt = realloc(ppt, n+1); // shrink the buffer to fit 

// don't forget to terminate with the null character 
ppt[n] = '\0'; 
+0

auch Sie könnten den Puffer 'n + 1' am Ende" realloc "um die Größe anzupassen. Und setze nul char _afterwards_ (wenn es keinen Platz im Puffer gibt, bist du 1 Byte kurz!) –

+1

Ich schlug vor, realloc zu verwenden, um die Puffergröße am Ende zu verkleinern –

Verwandte Themen