首页 > 解决方案 > C - 警告函数返回局部变量的地址 -wreturn-local-addr

问题描述

我写了一个从用户那里得到一行的函数。

在windoes上运行它不会引起任何警告。

但是在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;
}

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

标签: c

解决方案


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


推荐阅读