программа для вывода файла работает неправильно
написал простенькую программу по выводу содержимого файла, но после ввода пути программа выдает пустую строку и прекращает свою работу вот заголовочный файл .h
#ifndef S21_CAT_H
#define S21_CAT_H
#include <stdio.h>
#include <string.h>
#define NMAX 10000
struct text {
char string[NMAX];
};
void getPath ();
void cat (char path[NMAX]);
#endif
вот исполняемый .c
#include "S21_CAT.H"
void getPath() {
char path[NMAX];
printf("Введите путь к файлу: ");
scanf("%s", path);
cat(path);
printf("%s", path);
}
void cat(char path[NMAX]) {
FILE *file = fopen(path, "r");
if (file == NULL) {
perror("Ошибка при открытии файла");
return;
}
struct text txt[NMAX];
unsigned char i = 0;
printf("Начало чтения файла: %s\n", path); // Отладочное сообщение о начале чтения файла
while (i < NMAX && fgets(txt[i].string, NMAX, file) != NULL) {
printf("Чтение строки %d\n", i); // Сообщение перед чтением строки
printf("Считанная строка: %s", txt[i].string); // Вывод считанной строки
i++;
}
if (i >= NMAX) {
printf("Достигнут максимальный размер массива.\n");
} else {
printf("Всего считано строк: %d\n", i); // Сообщение о количестве считанных строк
}
fclose(file);
}
int main() {
getPath();
return 0;
}
Ответы (2 шт):
Автор решения: Harry
→ Ссылка
#define NMAX 10000
struct text {
char string[NMAX];
};
Т.е. размер text
- 10000 байт.
struct text txt[NMAX];
Размер txt
получается равен `NMAX*NMAX == 100000000 байт или примерно 95 МБайт. Обычно компиляторы такое количество памяти для стека не выделяют...
Попробуйте
struct text * txt = malloc(sizeof(struct text)*NMAX);
с free(txt)
при выходе из функции.
Автор решения: LolPopGames
→ Ссылка
Тут уже был ответ про NMAX*NMAX
,
Но вообще используй модуль <limits.h>
Там есть макрос PATH_MAX
(260
)