2013-10-14 82 views
1

代碼應該讀取用戶輸入的文本文件名,將每個字符複製到多維數組中,然後用標準輸出顯示它。它編譯,但產生難以理解的文本。我錯過了什麼嗎?讀取文本文件,複製到C中的數組中

for (i = 0; i < BIGGEST; i++) { 
     for (j = 0; j < BIGGESTL; j++) { 
      if (fgetc(array, fp)) != EOF) 
       array[i][j] = c; 
      else array[i][j] = '\0' 


     } 

    fclose(fp);  
    return 0; 
} 

回答

2

當你遇到EOF時,你停止填充數組,但是無論如何你都打印完整的數組。

如果從文件中讀取的數據小於輸入數組,那麼您將讀取該數據,然後將該數據打印出來,再加上任何隨機字符位於內存位置,而不會覆蓋文件中的數據。由於要求似乎是要打印文本數據,因此您可以在數組中插入特殊標記(例如'\ 0')以指示您遇到EOF的位置,並在到達該標記時停止顯示數據。

+0

也檢查你不會超過你的平臺和/或編譯器設置最大堆棧大小。你分配近1MB的內存。對於VS默認堆棧大小似乎是1MB:http://stackoverflow.com/questions/1825964/c-c-maximum-stack-size-of-program –

0

你最好從文件中讀取

每一行例如:

int i = 0; 
while(fgets(text[i],1000,fp)) 
{ 
    i++; 
} 
0

雖然問題是編輯,只有部分的代碼留在的問題。我發佈的內容超過了目前問題所需的內容。原因是,原始發佈的完整代碼可能會有很多改進。

main()功能:

您需要檢查的argc值等於2你的目的,然後纔在argv[1]值讀取。否則,如果在這種情況下執行的程序沒有命令行參數(即file_name),則會發生無效內存讀取,如果您在argv[1]中讀取,則會導致分段錯誤。

read_file_and_show_the contents()功能:

停止讀取文件,如果到達文件結束或最大字符在字符陣列中的讀取和存儲。

以下計劃將幫助您可視化:

#include <stdio.h> 

/*Max number of characters to be read/write from file*/ 
#define MAX_CHAR_FOR_FILE_OPERATION 1000000 

int read_and_show_the_file(char *filename) 
{ 
    FILE *fp; 
    char text[MAX_CHAR_FOR_FILE_OPERATION]; 
    int i; 

    fp = fopen(filename, "r"); 

    if(fp == NULL) 
    { 
     printf("File Pointer is invalid\n"); 
     return -1; 
    } 
    //Ensure array write starts from beginning 
    i = 0; 

    //Read over file contents until either EOF is reached or maximum characters is read and store in character array 
    while((fgets(&text[i++],sizeof(char)+1,fp) != NULL) && (i<MAX_CHAR_FOR_FILE_OPERATION)) ; 

    //Ensure array read starts from beginning 
    i = 0; 

    while((text[i] != '\0') && (i<MAX_CHAR_FOR_FILE_OPERATION)) 
    { 
     printf("%c",text[i++]); 
    } 

    fclose(fp); 

    return 0; 
} 

int main(int argc, char *argv[]) 
{ 
    if(argc != 2) 
    { 
     printf("Execute the program along with file name to be read and printed. \n\ 
       \rFormat : \"%s <file-name>\"\n",argv[0]); 
     return -1; 
    } 

    char *filename = argv[1]; 

    if((read_and_show_the_file(filename)) == 0) 
    { 
     printf("File Read and Print to stdout is successful\n"); 
    } 
    return 0; 
}