C-警告函数返回局部变量-wreturn-local-addr

时间:2019-03-19 08:36:04

标签: c

我写了一个从用户那里获取代码的函子。

在窗口中运行它不会引起任何警告。

但是在Unix上我得到警告:

  

函数UserIO_ReadLineFromUser()返回本地变量 -wreturn-local-addr

的地址
char* UserIO_ReadLineFromUser()
{
int i = 0, lineLen = 0;
char lineFromUser[MAX_INPUT_LINE_LENGTH];
fgets(lineFromUser, MAX_INPUT_LINE_LENGTH, stdin);
lineLen = strlen(lineFromUser);
lineFromUser[lineLen-1] = '\0';
while ('\0' != lineFromUser[i])
{
    lineFromUser[i] = tolower(lineFromUser[i]);
    i++;
}
return lineFromUser;
}

这就是我在main()上调用它的方式:

int main()
{
List* pHead = NULL;
char line[MAX_INPUT_LINE_LENGTH];
while (true)
{
    strcpy(line, UserIO_ReadLineFromUser());
    UserIO_ExecuteLineFromUser(line, &pHead);
}
return 0;
}

该程序有效,但我想摆脱此警告

1 个答案:

答案 0 :(得分:2)

您返回在堆栈上创建的变量。这是未定义的行为,导致函数返回后堆栈被破坏。您应该在堆上分配此变量,或传递给函数内存缓冲区