我写了一个从用户那里获取代码的函子。
在窗口中运行它不会引起任何警告。
但是在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;
}
该程序有效,但我想摆脱此警告
答案 0 :(得分:2)
您返回在堆栈上创建的变量。这是未定义的行为,导致函数返回后堆栈被破坏。您应该在堆上分配此变量,或传递给函数内存缓冲区