Переполнение стека при выводе содержимого файла - C (СИ)
Формулировка задачи:
Программа считывает имя файла с входного потока, отображает содержимое файла по 5 симвоов,
Не пойму, из-за чего переполнение стека?
Его и в отладчике не посмотришь, оно в самом конце появляется, когда надпись Press any Key to Continue
#include "stdio.h"
#include "stdlib.h"
#define CONSOLE_LEN 5
int quality_gf(char* in_str){
FILE fp;
fopen_s(&fp, in_str, "r");
if (fopen_s(&fp, in_str, "r") == NULL) return 1;
else return 0;
}
void get_file(char* in_str,int len){
int in_char;
int i=0;
while ((i < len) && (in_char = getchar()) != '\n'){
in_str[i] = in_char;
i++;
}
in_str[i] = '\0';
}
void show_console(char* out_str){
if (out_str[0] == '\0') printf("Bol'she nu4ego net!");
printf("%s \n",out_str);
printf("More?(1-Yes) \n");
}
int Rlast(){
char in_char;
fflush(stdin);
in_char = getchar();
if (in_char == '1') return 1;
else return 0;
}
void f_read(const char* in_str, char* out_str, int len){
static int f_seek;
int f_count = 0;
FILE* fp;
fopen_s(&fp, in_str, "r");
fseek(fp,f_seek,SEEK_SET);
while (f_count < len){
if (out_str[f_count] == EOF){ break; }
out_str[f_count] = fgetc(fp);
f_seek++;
f_count++;
}
fclose(fp);
out_str[f_count] = '\0';
}
void main(){
char out_str[CONSOLE_LEN];
char in_str[255];
get_file(in_str,sizeof(in_str));
if (quality_gf(in_str)){
do{
f_read(in_str, out_str,sizeof(out_str));
show_console(out_str);
} while (Rlast());
}
else printf("File NOT FOUND! \n");
system("pause");
};Решение задачи: «Переполнение стека при выводе содержимого файла»
textual
Листинг программы
if (out_str[f_count] == EOF){ break; }
out_str[f_count] = fgetc(fp);
Объяснение кода листинга программы
out_str- это массив символов, в который считываются данные из файла.f_count- это счетчик, который отслеживает количество прочитанных символов.EOF- это специальный символ, который указывает на конец файла.break- это оператор, который прекращает выполнение цикла.fgetc(fp)- это функция, которая считывает один символ из файла, указанного в переменнойfp.