2016-11-04 56 views
0

所以我試圖從文件字符讀取到數組中。這裏是我的代碼:從fille到char數組讀取C語言

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

int main() 
{ 
    FILE * fp; 
    char abc[255]; 
    int i = 0; 

    fp = fopen ("source.c", "r"); 

    while(fgetc(fp) != EOF) 
    { 
     fputc(abc[i], FILE *fp); 
     printf("%c", abc[i]); 
     i++; 

    } 

    fclose(fp); 



    return(0); 
} 

我得到一個錯誤:

main.c: In function 'main': 
main.c:19:19: error: expected expression before 'FILE' 
    fputc(abc[i], FILE *fp); 

這個錯誤是什麼意思?什麼是錯的,我該如何解決它?

+0

INT的fputc(INT字符,FILE *流); (在你的情況下,fputc(abc [i],fp);) –

+0

在'c'中,你不會將參數類型作爲函數參數傳遞,在'fputc'調用中擺脫'FILE *'。但是整條線都是問題。 'fputc'試圖爲流寫入一個字符..你已經打開這個文件只能用'「r」'模式讀取。如答案所示,只需轉儲'fputc'行即可。如果你也想寫一些文件到文件中,你必須打開一個文件才能寫入。 – yano

+0

這一行:'while(fgetc(fp)!= EOF)'正在讀取文件中的字符,並將其存儲在任何地方。建議:'char abc [255]; int ch; for(i = 0; i <255 &&(ch = fgetc(fp)!= EOF)); i ++){abc [i] =(char)ch; }' – user3629249

回答

2

錯誤是關於fputc()的錯誤用法。第二個參數是。 但在你的情況下,你不需要致電fputc(),因爲你也使用printf()。

您還有其他問題。你根本不存儲從文件中讀取的字符。這樣做:

int in; 

    while((in=fgetc(fp)) != EOF) 
    { 
     in = abc[i]; 
     printf("%c", abc[i]); 
     i++; 
    } 

一些一般性的評論:

  • 永遠做錯誤檢查所有標準功能。如果fopen()失敗怎麼辦?
  • 您的陣列最多隻能容納256個字符。如果文件source.c有更多字符怎麼辦?
0
#include <stdio.h> 
#include <stdlib.h> 

int main() 
{ 
    FILE * fp; 
    char abc[255]; 
    int i = 0; 

    fp = fopen ("source.c", "r"); 

    // we need to make sure that we can fit 
    // into buffer - that's why we check whether i < 255 
    while(i<255 && (abc[i] = fgetc(fp)) != EOF) 
    { 
    printf("%c", abc[i]); 
    i++; 
    } 
    // if we are way before end of the buffer 
    // we should think about terminating string 
    if(i<254) 
    abc[i] = '\0'; 
    else 
    // otherwise, we have to make sure that last character 
    // in buffer is zero 
    abc[254] = '\0'; 
    printf("%s", abc); 

    fclose(fp); 

    return(0); 
} 
+0

它現在有效。但是這部分是什麼? 如果(i <254) abc [i] ='\ 0'; else abc [254] ='\ 0'; printf(「%s」,abc); – LakyJ

+0

在C中,您必須確保字符串(字符數組)以'\ 0'(字符串的結尾)結尾。在這種情況下,我們有兩種情況。緩衝區適合數組,我們確保將'\ 0'放在最後位置。否則,我們覆蓋最後一個字符,並在最後加上'\ 0'。 – mko