FILENAME_MAX  Macro

O macro FILENAME_MAX expande para um inteiro que indica o tamanho máximo que uma cadeia de caracteres, representando o caminho de um arquivo, pode conter.

Caso a implementação da biblioteca padrão não apresente uma restrição de tamanho, este macro expande para um inteiro que indica o tamanho máximo recomendado para uma cadeia de caracteres que represente o caminho de um arquivo.

É importante notar que o valor deste macro não indica o tamanho máximo do nome de um arquivo, mas sim da cadeia de caracteres que o contém, ou seja, o caminho de um arquivo. Para o nome do arquivo, existem restrições específicas dependendo do sistema operacional e do sistema de arquivos utilizado. Por exemplo, para um usuário do sistema operacional Windows com o sistema de arquivos NTFS, o nome do arquivo pode conter, no máximo, 255 caracteres.

Exemplo
#include <stdio.h>
#include <string.h>

/* Da referência do fgets */
char* ler_string_seguramente(char* string, int tamanho) {
    if (fgets(string, tamanho, stdin) != NULL) {
        /* Remove a nova linha (\n), caso ela tenha sido lida pelo fgets */
        int indice_ultimo_caractere = strlen(string) - 1;
        if (string[indice_ultimo_caractere] == '\n') {
            string[indice_ultimo_caractere] = '\0';
        }
        return string;
    }

    return NULL;
}

int main() {
    char nome_arquivo[FILENAME_MAX];
    FILE *arquivo;

    printf("Nome do arquivo a ser criado (máximo de %d caracteres): ", FILENAME_MAX);
    ler_string_seguramente(nome_arquivo, FILENAME_MAX);

    arquivo = fopen(nome_arquivo, "r");
    if (arquivo != NULL) {
        fprintf(stderr, "O arquivo %s já existe.\n", nome_arquivo);
        fclose(arquivo);
        return -1;
    }

    arquivo = fopen(nome_arquivo, "w");
    if (arquivo == NULL) {
        fprintf(stderr, "Erro ao criar o arquivo %s.\n", nome_arquivo);
        return -2;
    } 

    printf("Arquivo criado.\n");
    fclose(arquivo);

    return 0;
}