Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-警告函数返回局部变量的地址-wreturn local addr_C - Fatal编程技术网

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

C-警告函数返回局部变量的地址-wreturn local addr,c,C,我写了一个func,从用户那里得到一行 在windoes上运行不会引起任何警告 但在unix上,我得到了警告: 函数UserIO\u ReadLineFromUser()返回局部变量的地址-wreturn local addr 这就是我在main()上的调用方式: 该程序可以运行,但我想消除此警告返回在堆栈上创建的变量。这是未定义的行为,因为在函数返回后堆栈被破坏。您应该在堆上分配此变量,或者将返回在堆栈上创建的变量传递到函数内存缓冲区。这是未定义的行为,因为在函数返回后堆栈被破坏。您应该在堆上

我写了一个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;
}