программа для вывода файла работает неправильно

написал простенькую программу по выводу содержимого файла, но после ввода пути программа выдает пустую строку и прекращает свою работу вот заголовочный файл .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)

→ Ссылка