2017-01-04 107 views
0

這是爲什麼當我在輸出中顯示字符串時,我擁有所有單詞但在最後一行中有一個奇怪的符號,一個ASCII隨機符號...如何在字符串中保存文本文件的內容

我的目標是保存一個字符串中的所有單詞來操作它。

例如,我有這個文件:

Mario 


Paul 


Tyler 

我如何保存所有單詞串?

#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

也許是因爲您錯誤地使用了'feof'。請參閱[爲什麼「while(!feof(file))」總是錯誤?](http://stackoverflow.com/questions/5431941/why-is-while-feof-file-always-wrong)更好地測試從'fscanf'返回值,以保證它確實掃描了你想要的內容。 –

+1

請注意,當打開文件失敗時,您不應該調用'fclose()'。由於您不使用命令行參數,所以編寫'int main(void)'會更清晰。 –

回答

1

而不是使用的fscanf的,嘗試用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'需要鍵入'int'(根據OP的代碼,不是這種情況),以便您的提案能夠正常工作。 – alk

+0

'getc'與'char'一起工作,所以應該沒有問題。 –

+0

getc()'返回EOF'的時候會出現問題。推薦進一步閱讀:http://stackoverflow.com/questions/7119470/int-c-getchar – alk

0

這裏的fslurp。由於需要手動增加緩衝區,所以我有點麻煩。

/* 
    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; 
} 
相關問題