Создать / изменить / использовать внешнюю переменную в C - PullRequest
0 голосов
/ 30 января 2019

У меня есть файл заголовка, содержащий:

extern char *finalLoggerPath;

Я пытаюсь реализовать функцию, которая может инициализировать или изменить переменную finalLoggerPath.

Моя функция main косвенно вызываетфункция, определенная во втором файле.Эта вторая функция генерирует путь, который еще не существует, и сохраняет его в двух переменных области файла, finalPath и finalLoggerPath.После этого я хотел бы, чтобы другая функция, определенная в третьем файле, могла печатать finalLoggerPath.

Я пытался реализовать это, но я получаю ошибку:

Ошибка доступа к памяти (используется дамп памяти)

Как я могу исправить моюпрограмма?


Мой код:

// First File

void initLog() {
    generateFileNameWithDate();
}

int main(void) {
    initLog();
}

// Second File

#define PATHTEST "../TestLogSystem/"

#include "Info.h"

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <unistd.h>

char pathToFile[100] = "../TestLogSystem/";
char *actual;
char *finalPath;

char *finalLoggerPath;

int generateFileNameWithDate() {
    int counter = 1;
    char filename[999];
    char filenameBuffer[999];
    int notCreatetFile = 1;

    char counterS[999];
    time_t now = time(NULL);

    if (now == -1) {
        puts("The time() function failed");
        return 1;
    }

    struct tm *ptm = localtime(&now);

    if (ptm == NULL) {
        puts("The localtime() function failed");
        return 1;
    }

    strftime(filename, sizeof(filename),
            strcat(strcat(pathToFile, "%Y%m%d"), ".json"), ptm);

    while (notCreatetFile) {

        if (access(filename, F_OK) != -1) {
            // file exists
            memset(filename, 0, sizeof(filename));
            memset(pathToFile, 0, sizeof(pathToFile));

            sprintf(pathToFile, "%s", PATHTEST);

            memset(filenameBuffer, 0, sizeof(filenameBuffer));

            sprintf(counterS, "%d", counter);

            strftime(filename, sizeof(filename),
                    strcat(
                            strcat(
                                    strcat(
                                            strcat(strcat(pathToFile, filenameBuffer),
                                                    "%Y%m%d"), "-Test-"),
                                    counterS), ".json"), ptm);

        } else {
            // file doesn't exist
            finalPath = malloc(strlen(filename) + 1);
            printf("finalPath: %s \n", finalPath);

            strcpy(finalPath, filename);
            strcpy(finalLoggerPath, finalPath);

            fopen(finalPath, "w");

            notCreatetFile = 0;
        }
        ++counter;
    }

    return 0;
}

// Third File


#include "Info.h"

void print() {
    printf("FinalLoggerPath: %s", finalLoggerPath);
}

Скомпилирую:

gcc CallFileExists.c FileExists.c GetVariableFromFileExists.c 
...