C-警告函数返回局部变量的地址-wreturn local addr
我写了一个func,从用户那里得到一行 在windoes上运行不会引起任何警告 但在unix上,我得到了警告: 函数UserIO\u ReadLineFromUser()返回局部变量的地址-wreturn local addr 这就是我在main()上的调用方式:C-警告函数返回局部变量的地址-wreturn local addr,c,C,我写了一个func,从用户那里得到一行 在windoes上运行不会引起任何警告 但在unix上,我得到了警告: 函数UserIO\u ReadLineFromUser()返回局部变量的地址-wreturn local addr 这就是我在main()上的调用方式: 该程序可以运行,但我想消除此警告返回在堆栈上创建的变量。这是未定义的行为,因为在函数返回后堆栈被破坏。您应该在堆上分配此变量,或者将返回在堆栈上创建的变量传递到函数内存缓冲区。这是未定义的行为,因为在函数返回后堆栈被破坏。您应该在堆上
该程序可以运行,但我想消除此警告返回在堆栈上创建的变量。这是未定义的行为,因为在函数返回后堆栈被破坏。您应该在堆上分配此变量,或者将返回在堆栈上创建的变量传递到函数内存缓冲区。这是未定义的行为,因为在函数返回后堆栈被破坏。您应该在堆上分配此变量,或者将看到的警告传递到函数内存缓冲区您看到的警告很可能不是因为unix与windows的差异。这很可能是因为您使用的两个不同编译器中设置了不同的标志。您正在从UserIO_ExecuteLineFromUser()返回一个局部变量指针。简单的解决方案:因为您不使用UsIORIORIGUTUTILIN FROUMSORE()返回的值,所以可以将它的返回类型设为无效,并从它中删除“RealLeFulMuSeR;”行。假设您使用GCC,用“代码>”来禁止此警告- Wno返回本地ADDR< /COD>:不要警告返回指针(或C++中引用)。函数返回后超出范围的变量。我从UserIO\u ReadLineFromUser获得错误。我将编辑帖子以使其更清晰。您看到的警告很可能不是因为unix与windows的不同。这很可能是因为您使用的两个不同编译器中设置了不同的标志。您正在从UserIO_ExecuteLineFromUser()返回一个局部变量指针。简单的解决方案:因为您不使用UsIORIORIGUTUTILIN FROUMSORE()返回的值,所以可以将它的返回类型设为无效,并从它中删除“RealLeFulMuSeR;”行。假设您使用GCC,用“代码>”来禁止此警告- Wno返回本地ADDR< /COD>:不要警告返回指针(或C++中引用)。函数返回后超出范围的变量。我从UserIO\u ReadLineFromUser获得错误。我会编辑这篇文章,让它更清晰。还有一个误读。它正在被使用。啊!在while块内的第一行中。对很抱歉“我也错过了。”亚历克斯·特恩克斯说。那么为什么它在windoes上工作呢?我的警告级别为4,由于编译警告标志,我在visual Studio上没有收到任何警告。我不知道您的windows编译器,但也可能启用这些标志。不管怎么说,它的代码是错误的,因为你没有使用你的密码variable@Alex我正在使用返回值。在strcpy中,我将返回的值复制到line@JoeyMallone那是误读。它正在被使用。啊!在while块内的第一行中。对很抱歉“我也错过了。”亚历克斯·特恩克斯说。那么为什么它在windoes上工作呢?我的警告级别为4,由于编译警告标志,我在visual Studio上没有收到任何警告。我不知道您的windows编译器,但也可能启用这些标志。不管怎么说,它的代码是错误的,因为你没有使用你的密码variable@Alex我正在使用返回值。在strcpy中,我将返回的值复制到第行
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;
}
int main()
{
List* pHead = NULL;
char line[MAX_INPUT_LINE_LENGTH];
while (true)
{
strcpy(line, UserIO_ReadLineFromUser());
UserIO_ExecuteLineFromUser(line, &pHead);
}
return 0;
}