gpt4 book ai didi

c - 段错误 - sprintf

转载 作者:太空宇宙 更新时间:2023-11-04 05:36:00 25 4
gpt4 key购买 nike

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

我的代码在这里:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com