Хотя вопрос редактируется и только часть кода остается под вопросом. На данный момент я публикую больше, чем требуется для этого вопроса. Причина в том, что изначально опубликованного полного кода может быть много улучшений.
В main()
функции:
Вы должны проверить значение argc
равным 2
для вашей цели, и только затем прочитать в стоимости argv[1]
. Если программа выполняется без аргумента командной строки, которая в этом случае является файловым именем, происходит неправильное считывание памяти, что приводит к ошибке сегментации, если вы читаете в 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;
}
Также проверьте, что вы не превышает максимальный размер стека для вашей платформы и/или настройки компилятора. Вы выделяете почти 1 МБ памяти. Для VS размер стека по умолчанию составляет 1 МБ: http://stackoverflow.com/questions/1825964/c-c-maximum-stack-size-of-program –