雖然問題是編輯,只有部分的代碼留在的問題。我發佈的內容超過了目前問題所需的內容。原因是,原始發佈的完整代碼可能會有很多改進。
在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;
}
也檢查你不會超過你的平臺和/或編譯器設置最大堆棧大小。你分配近1MB的內存。對於VS默認堆棧大小似乎是1MB:http://stackoverflow.com/questions/1825964/c-c-maximum-stack-size-of-program –