c - 段错误 - sprintf

标签 c segmentation-fault

我无法确定我的程序中出现段错误的原因。我以前成功地做过这样的事情,但是这个特定的函数导致了段错误。

我的代码在这里:

void logErrorStatus(char* message)
{
    char* errorMessage = "test";

    sprintf(errorMessage, "ERROR (%s, %d) >> %s", __FILE__, __LINE__, message);

    logMessage(errorMessage);
}


void logMessage(char* message)
{
    FILE* file = NULL;

    char buffer[SIZE];
    struct tm *sTm;

    time_t now = time(NULL);
    sTm = localtime(&now);

    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", sTm);

    file = fopen(LOGFILE, "a");

    if(file == NULL)
    {
        printf("Error opening log file.\n");
    }
    else
    {
        fprintf(file, "%s : %s\n", buffer, message);
    }

    if(fclose(file) != 0)
    {
        printf("Error closing log file.\n");
    }

}

段错误发生在 logErrorStatus() 函数中的 sprintf() 行上。

任何帮助都会很棒!谢谢!

最佳答案

您正试图用一个新值覆盖一个可能在只读内存部分中定义的常量字符串文字。您应该改为动态分配和释放内存。

举个例子:

void logErrorStatus(char *message)
{
    //ALLOCATE 1024 IN CASE YOU CHANGE THE STRING LITERAL BELOW, AND ADD LENGTH OF MESSAGE
    char *errorMessage = malloc(1024 + strlen(message));

    if (errorMessage != NULL)
    {
        sprintf(errorMessage, "ERROR (%s, %d) >> %s", __FILE__, __LINE__, message);

        logMessage(errorMessage);

        free(errorMessage);
    }
}

或者在栈上分配内存:

void logErrorStatus(char *message)
{
    //ALLOCATE 1024 AS MAX LENGTH OF OUTPUT
    char errorMessage[1024];

    sprintf(errorMessage, "ERROR (%s, %d) >> %s", __FILE__, __LINE__, message);

    logMessage(errorMessage);
}

关于c - 段错误 - sprintf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36408046/

相关文章:

c - C (C99) 中嵌套函数调用的限制

c - 如何访问二维数组的外边界元素?

c++ - 将数字乘以矩阵

objective-c - 当调试器摘要显示文本时,为什么此 NSString 长度为零?

c - 为什么这些指针显示不同的地址?

c++ - 段错误 - 读取初始化指针数组

c - C 中的段错误(代码转储)错误

c++ - 编译后确定静态初始化顺序?

c - *char 数组末尾的段错误

c - 初始化大 vector 时出现段错误