2017-01-04 22 views
0

Dies ist der Code, warum, wenn ich in der Ausgabe die Zeichenfolge ich alle Wörter, aber mit in der letzten Zeile ein seltsames Symbol, ein ASCII-Zufallssymbol ...So speichern Sie in einer Zeichenfolge den Inhalt einer Textdatei

zeigen

Mein Ziel ist es, in einer Zeichenfolge alle Wörter zu speichern, um damit zu arbeiten.

Zum Beispiel habe ich dieses Dokument:

Mario 


Paul 


Tyler 

Wie kann ich alle Wörter in einem String speichern ??

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

/* run this program using the console pauser or add your own getch, system("pause") or input loop */ 

int main(int argc, char *argv[]) { 
    int l,i=0,j=0,parole=0; 
    char A[10][10]; 
    char leggiparola; 
    char testo[500]; 
    FILE*fp; 
    fp=fopen("parole.txt","r"); 
    if(fp!=NULL) 
    { 
     while(!feof(fp)) 
     { 
      fscanf(fp,"%c",&leggiparola); 
      printf("%c", leggiparola); 
      testo[j]=leggiparola; 
      j++; 
     } 
    } 
    fclose(fp); 
    printf("%s",testo); 
    return 0; 
} 
+5

Vielleicht, weil Sie 'feof' falsch verwenden. Bitte lesen Sie [Warum ist "while (! Feof (datei))" immer falsch?] (Http://stackoverflow.com/questions/5431941/why-is-which-feof-file-always-wrong) Besser, die zu testen Rückgabewert von 'fscanf', um sicher zu stellen, dass er Ihre beabsichtigten Daten überprüft hat. –

+1

Beachten Sie, dass Sie 'fclose()' nicht aufrufen sollten, wenn Sie die Datei nicht öffnen können. Da Sie die Befehlszeilenargumente nicht verwenden, wäre es besser, 'int main (void)' zu schreiben. –

Antwort

1

Statt fscanf zu verwenden, versuchen Sie, mit getc:

int leggiparola; /* This need to be an int to also be able to hold another 
        unique value for EOF besides 256 different char values. */ 

... 

while ((leggiparola = getc(fp)) != EOF) 
{ 
    printf("%c",leggiparola); 
    testo[j++] = leggiparola; 
    if (j==sizeof(testo)-1) 
     break; 
} 
testo[j] = 0; 
+1

'leggiparola' muss" int "eingegeben werden (was gemäß dem OP-Code nicht der Fall ist), damit Ihr Vorschlag funktioniert. – alk

+0

'getc' funktioniert mit' char', also sollte es kein Problem geben. –

+0

Es wird ein Problem geben, sobald 'getc()''EOF' zurückgibt. Empfohlene weiterführende Literatur: http://stackoverflow.com/questions/7119470/int-c-gechar – alk

0

Hier fslurp. Ich bin ein bisschen chaotisch aufgrund der Notwendigkeit, den Puffer manuell zu wachsen.

/* 
    load a text file into memory 

*/ 
char *fslurp(FILE *fp) 
{ 
    char *answer; 
    char *temp; 
    int buffsize = 1024; 
    int i = 0; 
    int ch; 

    answer = malloc(1024); 
    if(!answer) 
    return 0; 
    while((ch = fgetc(fp)) != EOF) 
    { 
    if(i == buffsize-2) 
    { 
     if(buffsize > INT_MAX - 100 - buffsize/10) 
     { 
      free(answer); 
      return 0; 
     } 
     buffsize = buffsize + 100 * buffsize/10; 
     temp = realloc(answer, buffsize); 
     if(temp == 0) 
     { 
     free(answer); 
     return 0; 
     } 
     answer = temp; 
    } 
    answer[i++] = (char) ch; 
    } 
    answer[i++] = 0; 

    temp = realloc(answer, i); 
    if(temp) 
    return temp; 
    else 
    return answer; 
} 
Verwandte Themen