c - 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# - Parallel for loop to add points to series resulting in index outside the bounds of array
- r - How should I open the package "scater"?
- javascript - React 路由器未打开 404 未找到页面
- python - 如何将 .ost 文件解析为单独的电子邮件(最好使用 Python)
- javascript - freeCodeCamp JavaScript 初学者课程
- powershell - 使用循环找不到更好的解决方案
- vba - 你如何创建一个黄色的文本框?
- java - 如何自动打开浏览器进行用户授权(“/回调”)?
- python - 将变量值分配为字典的键
- angular - Http原始请求向上地址